C语言快速排序函数 c语言排序快排

c语言 qsort排序方法有很多种C语言快速排序函数, 选择排序,冒泡排序,归并排序,快速排序等 。
看名字都知道快速排序 是目前公认C语言快速排序函数的一种比较好C语言快速排序函数的排序算法(C语言快速排序函数我没听书速度比这快的C语言快速排序函数了 , 特殊场合例外),比选择排序,冒泡排序都要快 。这是因为他速度很快,所以系统也在库里实现这个算法 , 便于我们的使用 。
这就是qsort 。
qsort 要求提供一个 比较函数,是为了做到通用性更好一点 。比如你不仅仅的是要排序一个数字而已,可能你要用来排序几个数字 , 比如有一个结构
struct num {
int a;
int b;
};
然后我有一个num 类型的数组,numdddd[100];
我想给 dddd这个数组排序,那怎么办? 我想让 ab 最大的num元素排在数组的最前面,那又怎么办?
这都可以通过定义比较函数来做到的 。
比较函数的作用就是给qsort指明 元素的大小是怎么比较的 。
像这样的比较函数 inline int MyCmp(const void* a, const void* b)
都是有两个元素 作为参数,返回一个int 值,如果 比较函数返回大于0,qsort就认为 ab , 如果比较函数返回等于0 qsort就认为a 和b 这两个元素相等,返回小于零 qsort就认为 ab。
qsort 知道元素大小 , 就可以把大的放到前面去 。
如果你的比较函数放回本来应该是1 的(ab),你比较函数却返回一个 -1 (小于零的)那么qsort认为ab 的,就把 b放到前面去,但实际上是a大于b的,所以就造成升降序的差别了 。
同样的道理,如果有一个 结构
strunt 人{
int 身高;
int 体重;
}
你想让身高最小的人排在最前面,那么你也要自己定义自己的比较函数,
菜鸟提问 c语言关于快速排序其实,最想说明的是那段交换的代码
R[j]^=R[i];
R[i]^=R[j];
R[j]^=R[i];
一定要排除 i==j 的情况 。即自己与自己交换的情况 。
如C语言快速排序函数:
a=9;
a^=a;/*a=0*/
a^=a;/*a=0*/
a^=a;/*a=0*/
a就不再是10了 。
#includestdio.h
#includestdlib.h
void quicksort(int R[],int s,int t)
{
int i,j;
int temp;
if(st)
{
temp=R[s];/*选第一个数作为参照*/
/*while(i!=j)不要用这种方法判定循环结束 , 万一i==j-1,i,j--后 i〉j了 , C语言快速排序函数!=这个条件就救不了你了*/
for(i=s 1,j=t;i=j;i,j--)/*不包括参照数,进行左右阵营站队*/
{
while(jiR[j]=temp)/*R[j]=temp不要 = 也行,加了更好,毕竟相等的无论站左站右,哪边都无所谓*/
j--;
while(ijR[i]=temp)
i;
if(i!=j){/*i千万不能等于j*/
R[j]^=R[i];
R[i]^=R[j];
R[j]^=R[i];
}
}
i--;
if(R[s]R[i])i--;/*调整i的值 , 使i指向最后一个小于等于参照数的位置*/
/*将参照数 与 最后一个小于等于参照数的数进行交换 , 这样就真正把左右两个阵营分开了*/
R[s]=R[i];
R[i]=temp;
quicksort(R,s,i-1);
quicksort(R,i 1,t);
}
}
int main(void)
{
int i;
int a[]={5,3,2,1,9,8,7,4,5};
quicksort(a,0,sizeof(a)/sizeof(int)-1);
for(i=0;isizeof(a)/sizeof(int);i)
printf("%d ",*(a i));
return 0;
}
C语言中void quicksort是什么意思void quicksort(int a[],int n)
{
对数组进行快速排序的代码
}
根据你的字面意思就是一个快速排序的函数 。
由于参数传递的是数组,所以不需要返回值 。应为排序的代码是直接对数组的元素进行操作的 。
c语言 快速排序 。。int quickSortpx(SqList list,int first,int end)
{int compare;
compare=list.elem[first];
for(;firstend;)
{while(firstendlist.elem关于C语言快速排序函数和c语言排序快排的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
=compare)
{
end--;
}
if(firstendlist.elem关于C语言快速排序函数和c语言排序快排的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
compare)
{
list.elem[first]=list.elem关于C语言快速排序函数和c语言排序快排的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
;
first;
}
while(firstendlist.elem[first]=compare)
{
first;
}
if(firstendlist.elem[first]compare)
{
list.elem关于C语言快速排序函数和c语言排序快排的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
=list.elem[first];
end--;
}}
/*你没有把取出的第一个元素放回链表,请在这里添加*/
list.elem关于C语言快速排序函数和c语言排序快排的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
=compare;/*或list.elem[first]=compare;*/
return(first);}
用C语言编写函数实现快速排序(升序),在主函数中输入数组数据,并调用该数得到排序结果 。//希望对楼主有小小的帮助 。。。
//排序的算法是二分法,N的对数时间复杂度 。。。
//如果有疑问 , 我们可以再探讨 。。。
#includestdlib.h
#includestring.h
#includestdio.h
bool merge(int * array,int p,int q,int r)
{
if(!(pqr)p=0r=sizeof(array)/sizeof(array[0])-1)
{
return false;
}
int * left =new int[q-p 1];
int * right=new int[r-q];
memcpy(left,array p,sizeof(int)/sizeof(char)*(q-p 1));
memcpy(right,array q 1,sizeof(int)/sizeof(char)*(r-q));
int left_index=0,right_index=0,left_max_index,right_max_index;
left_max_index=q-p 1;
right_max_index=r-q;
for(int k=p;k=rleft_indexleft_max_indexright_indexright_max_index;k)
{
if(left[left_index]=right[right_index])
{
array[k]=left[left_index];
left_index;
}
else
{
array[k]=right[right_index];
right_index;
}
}
if(left_index==left_max_index)
{
for(;k=rright_indexright_max_index;k,right_index)
{
array[k]=right[right_index];
}
}
else if(right_index==right_max_index)
{
for(;k=rleft_indexleft_max_index;k,left_index)
{
array[k]=left[left_index];
}
}
delete left;
delete right;
return true;
}
void merge_sort(int * array,int p,int r)
{
if(pr)
{
int q=(r p)/2;
merge_sort(array,p,q);
merge_sort(array,q 1,r);
merge(array,p,q,r);
}
}
void main()
{
int size,index,* array;
//printf("请输入元素个数:");
scanf("%d",size);
array=(int*)malloc(size*sizeof(int));
for(index=0;indexsize;index)
{
//printf("请输入第%d元素:",index 1);
scanf("%d",array[index]);
}
merge_sort(array,0,size-1);
for(index=0;indexsize;index)
{
printf("%d ",array[index]);
}
printf("\n");
}
【C语言快速排序函数 c语言排序快排】关于C语言快速排序函数和c语言排序快排的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读