- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构排序算法之快速排序
数据结构排序算法之
快速排序
算法介绍
快速排序也是交换类排序的一种。快速排序是选择一个数据作为枢纽,将啊序列分为两部分,枢纽的一边比它小(至少不大于),另一边比它大(至少不小于)。
执行流程
原始序列:23 45 12 90 78 56
I J
进行第一趟排序,选择23作为枢纽,整个过程是一次交替扫描的过程
使用最后一个元素J=56开始从右向左扫描
23 45 12 90 78 56 5623不交换,J--
I J
23 45 12 90 78 56 7823 J--
I J
23 45 12 90 78 56 1223 交换 I++
I J
12 45 90 78 56 4523 交换 J--
I J
12 45 90 78 56 此时I=J 所以这个位置为枢纽的位置
IJ
12 23 45 90 78 56 一趟排序结束
2) 然后从枢纽的位置开始分为两部分,按照同样的方法进行排序即可,也就递归。
示例代码
#includestdio.h
void quick_sort(int a[],int s,int e)
{
int tmp;
int i =s;
int j=e;
if(se)
{
tmp =a[s];
while(i!=j)
{
while(jia[j]tmp)j--;
if(ij)
{
a[i]=a[j];
i++;
}
while(jia[i]tmp)i++;
if(ij)
{
a[j]=a[i];
j--;
}
}
a[i]=tmp;
quick_sort(a,s,i-1);
quick_sort(a,i+1,e);
}
}
int main()
{
int a[] ={-12,23,1,46,6,23423,456,1,56,0,2,24,46,68,\
4,5234,234,436,654,576,43,354,432,32,4,\
23,4,2,3243,45,6,432,423,6,5,7,86,8,54,4,5435,\
3,5343,43,543,6,54,6,45,654,654,3,45,3,423,4,2,\
34,547,87,686867,4,53,32,23,432,34,43,5667,\
8897646,35,3,45,3,53,4,333,54,765,7,5,66,45,45353,\
534,5,34,6547,685,4,543,5,3,53,234,2,34,23,4,2,43,6,\
765,7,8,9,9,9,0,0,4534,52,3,234,2,41,435,23,123,235,\
436,7,43,23,243,3121};
int i =0;
for(i=0;isizeof a/sizeof(int);i++)
printf(%d ,a[i]);
printf(\n\n\n\n\n);
quick_sort(a,0,sizeof(a)/sizeof(int)-1);
for(i=0;isizeof a/sizeof(int);i++)
printf(%d ,a[i]);
printf(\n);
return 0;
}
执行结果
ky@ky-S910-X31E:~/libz/628$ gcc quicksort.c -oquick
./quick
ky@ky-S910-X31E:~/libz/628$ ./quick
-12 23 1 46 6 23423 456 1 56 0 2 24 46 68 4 5234 234 436 654 576 43 354 432 32 4 23 4 2 3243 45 6 432 423 6 5 7 86 8 54 4 5435 3 5343 43 543 6 54 6 45 654 654 3 45 3 423 4 2 34 547 87 686867 4 53 32 23 432 34 43 5667 8897646 35 3 45 3 53 4
文档评论(0)