快速排序【记录一下代码】
2017-03-20 19:10
281 查看
本文仅用作学习记录,大神勿喷O(∩_∩)O~
代码一、百度百科C++语言版本代码,参考数据结构p274(清华大学出版社,严蔚敏)
View Code
其实 Qsort1、Qsort2、Qsort5(博客园代码修改以后)三份代码是一样的
Qsort4跟上面几个是差不多的,但稍有一点点改变
Qsort3思路变化比较大一些。
Qsort6简直就是另类代码风格,瞎搞的,不过也是对的。
学习记住 Qsort1、Qsort2、Qsort5之一或者Qsort4即可。
注意:在快排过程中划分区间时,必须要有等号,比如:
这种地方>=不能改为>,否则可能死循环。
代码一、百度百科C++语言版本代码,参考数据结构p274(清华大学出版社,严蔚敏)
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 int cmp(const void *a,const void *b) 6 { return *(int*)a - *(int*)b; } 7 int main() 8 { 9 int a[50],b[50],c[50],d[50],e[50],f[50],g[50],h[50]; 10 int n,i,k=100000,index=1,count=0; 11 srand((unsigned)time(0)); 12 13 freopen("res.out","w",stdout); 14 for(;k>0;k--) 15 { 16 n=(rand()%2==1?49:50); 17 for(i=0;i<n;i++) 18 { 19 a[i]=rand()%3000; 20 h[i]=g[i]=f[i]=e[i]=d[i]=c[i]=b[i]=a[i]; 21 } 22 23 Qsort1(a, 0, n - 1); 24 Qsort2(b, 0, n - 1); 25 qsort(c,n,sizeof(c[0]),cmp); 26 Qsort3(e,0,n-1); 27 Qsort4(f,0,n-1); 28 Qsort5(g,0,n-1); 29 Qsort6(h,0,n-1); 30 31 for(i= 0; i < n; i++) 32 { 33 if(a[i]!=c[i]||b[i]!=c[i]||e[i]!=c[i]||f[i]!=c[i]||g[i]!=c[i]||h[i]!=c[i]) 34 break; 35 } 36 if(i<n) 37 { 38 printf("case %d:\n",index); 39 printf("A:");//Qsort1的结果 40 for(i=0;i<n;i++) 41 printf("%d ",a[i]); 42 printf("\n"); 43 44 printf("B:");//Qsort2的结果 45 for(i=0;i<n;i++) 46 printf("%d ",b[i]); 47 printf("\n"); 48 49 printf("C:");//标准结果序列 50 for(i=0;i<n;i++) 51 printf("%d ",c[i]); 52 printf("\n"); 53 54 printf("E:");//Qsort3的结果 55 for(i=0;i<n;i++) 56 printf("%d ",e[i]); 57 printf("\n"); 58 59 printf("F:");//Qsort4的结果 60 for(i=0;i<n;i++) 61 printf("%d ",f[i]); 62 printf("\n"); 63 64 printf("G:");//Qsort5的结果 65 for(i=0;i<n;i++) 66 printf("%d ",g[i]); 67 printf("\n"); 68 69 printf("H:");//Qsort6的结果 70 for(i=0;i<n;i++) 71 printf("%d ",h[i]); 72 printf("\n"); 73 74 printf("D:");//原未排序序列 75 for(i=0;i<n;i++) 76 printf("%d ",d[i]); 77 printf("\n"); 78 } 79 else { printf("case %d is ok!\n",index); count++;} 80 index++; 81 } 82 printf("%d of %d is ok!\n",count,index-1); 83 return 0; 84 }
View Code
其实 Qsort1、Qsort2、Qsort5(博客园代码修改以后)三份代码是一样的
Qsort4跟上面几个是差不多的,但稍有一点点改变
Qsort3思路变化比较大一些。
Qsort6简直就是另类代码风格,瞎搞的,不过也是对的。
学习记住 Qsort1、Qsort2、Qsort5之一或者Qsort4即可。
注意:在快排过程中划分区间时,必须要有等号,比如:
int i=left,j=right,key=a[left]; while(i<j) { while(i<j&&key>=a[j]) j--;//必须取等号,否则当数组两头的数相等时会死循环 a[i]=a[j]; while(i<j&&key<=a[i]) i++;//必须取等号,否则当数组两头的数相等时会死循环 a[j]=a[i]; }
这种地方>=不能改为>,否则可能死循环。
相关文章推荐
- 1063 sicily (木有准确理解题意,一直wrong error)——不过这事快速排序的一次复习,还是记录一下
- 快速记录一下cocos2dx 3.x 全屏幕 blur 效果实现相关代码
- wap2.0 xhtml 文件上传代码记录一下~~。cmwap测试不行,cmnet可以。
- 算法记录:二进制快速排序
- 快速排序代码实现_我来找茬
- 回顾一下“快速排序”
- 短代码快速记录
- 随机化快速排序代码
- 快速排序的C语言代码实现
- 【记录】JavaScript版 快速排序,还请高手指教。
- 快速排序代码
- 数据结构与算法学习记录:快速排序 (转)
- 对Dictionary操作 查找项和排序 [代码记录]
- oracle下快速删除重复的记录,借监并且总结了一下
- 冒泡排序、快速排序、选择排序、插入排序、shell排序C代码
- 快速排序的C语言代码实现
- 快速排序及代码实现
- 记录一下今天上午看的mmc代码(2.6.27)
- python 快速排序代码
- 快速排序 C代码