数据结构-快速排序 C语言源码
基本思想:
• 任取一个元素 (如第一个) 为中心
• 所有比它小的元素一律前放,比它大的元素一律后放,形成左右两个子表;
• 对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个
#include<stdio.h>
#include<stdlib.h>
struct KP{
int*elem;
int length;
};//定义结构
void ss(KP& l,int n)
{
int hj;
l.elem=(int*)malloc(sizeof(int)*n);
for(int k=0;k<n;k++)
{
scanf("%d",&hj);
l.elem[k]=hj;
}
l.length =n;
}//动态存储
void xianshi(KP l)
{
for(int i=0;i<l.length ;i++)
{
printf(" %d ",l.elem[i]);
}
}//显示线性表
int quick(KP &l,int low,int high,int &b,int &yd)
{
int p=l.elem[low];
int lo,h;
lo=low;
h=high;
while(lo!=h)
{
while(lo!=h&&l.elem[h]>=p)
{
b++;
h--;
}
int fg=l.elem[lo];
l.elem[lo]=l.elem[h];
l.elem[h]=fg;
yd++;
while(lo!=h&&l.elem[lo]<=p)
{
lo++;
b++;
}
int xg;
xg=l.elem[lo];
l.elem[lo]=l.elem[h];
l.elem[h]=xg;
yd++;
}
return lo;
}
void pai(KP &l,int low,int high,int &b,int &yd)
{
if(low<high)
{
int oi;
oi=quick(l,low,high,b,yd);
xianshi(l);
printf("\n");
pai(l,low,oi-1,b,yd);
pai(l,oi+1,high,b,yd);
}
}
main()
{
int n;
printf("请输入表长");
scanf("%d",&n);
KP l;
printf("\n开始输入表中元素");
ss(l,n);
int low=0;
int high=l.length -1;
int b=0;
int yd=0;
pai(l,low,high,b,yd);
xianshi(l);
printf("\n比较次数为%d 移动次数为%d",b,yd);
return 0;
}
快看,这才是重点!我想能看到这里的同学,无外乎两种人:来拷贝代码的人 和 来拷贝代码的人。
但,在拷贝走的时候,你要想清楚一件事,把代码拷走之后有个蛋用,搞明白对你来说才是最重要的。
好了,就酱紫。
老铁,这要是都不赞,说不过去吧!!!哦,对了,你这么好看,关注一下呗。。。
最后对自己说:
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。