邻近毕业,得总结一下自己学过的东西了,自己也不知道自己会什么,那就先从数据结构开始吧。
首先写个快速排序。
原理比较简单:
(1)在数组中随便找一个值a
(2)根据a进行分类,比a小的放a的左边,比a大的放a的右边
(3)递归,循环
需要注意的是:
(1)比如,int Quick_sort(int *p, int left, int right); 其中的 low 和 high 的值容易弄错。
举个例子,数组中有10个数,则 left = 1, right = 10;而不是 left = 0, right = 9;
(2)建立在(1)的基础上,递归的时候调用的是
quick_sort(p, left, i); // 是 i , 而不是 i - 1
quick_sort(p, i + 2, right); // 是 i + 2 , 而不是 i + 1
(3)此处的参数类型是 long 型, 可用于扩展,分析快排的性能,如下:
long s[100000];
for (long i = 0; i<100000; i++) s[i] = rand(); //产生随机数
quick_sort(s, 1, 100000);
cout << "running time:" << clock() << endl; //输出排序执行的时间,得添加头文件 #include<ctime>
1 void quick_sort(long *p, long left, long right) 2 { 3 4 if (left < right) 5 { 6 long i = left - 1, j = right - 1, temp = p[i]; 7 while (i < j) 8 { 9 while (i < j && p[j] > temp) j--; 10 if (i < j) 11 { 12 p[i++] = p[j]; 13 } 14 while (i < j && p[i] < temp) i++; 15 if (i < j) 16 { 17 p[j--] = p[i]; 18 } 19 } 20 p[i] = temp; 21 quick_sort(p, left, i); 22 quick_sort(p, i + 2, right); 23 } 24 }
然后可以在主函数中测试一下,如:
1 int main() 2 { 3 long s[] = { 5, 7, 8, 9, 1, 2, 3, 4, 10, 6 }; 4 quick_sort(s, 1, 10); 5 for (int i = 0; i < 10; i++) cout << s[i] << ends << ends; 6 return 0; 7 }
输出结果是: