快速排序算法
目录:
-
- 完整程序:
- 测试结果:
- 结果分析:
问题:
将给定数据元素按照从小到大排序
快速排序思路:
通过一趟排序将数据分成两个独立的部分,再分别对两部分数据快速排序(运用递归的思想)
完整程序:
#include #include void quick_sort(int *array,int start,int end);void show(int *array,int length);int partition(int *array,int start,int end);void main(){ //给定数组元素 int array[] = {9,7,18,4,10,18,5,3,80,25}; //计算数组长度 int length = sizeof(array) / sizeof(array[0]); //排序 quick_sort(array,0,length - 1); //显示排序后数组内容 show(array,length); system("pause"); return ;}int partition(int *array,int start,int end){ int key = array[start];//保存每次排序数组的第一个位置数据 while( start < end) { //从尾部数据开始和key比较,若key <= array[end]则不用交换数据,反之结束while循环 while(start < end && key <= array[end]) { end--; } if(start < end) { //将判断array[end]放在array[start]处 end 处的位置现在没有存放数据,为空 array[start] = array[end]; start++;//start后移一位 }//当key > array[start]时start继续后移,不用交换数据,反之while循环结束 while(start < end && key > array[start]) { start++; } if(start < end) { //将array[start]的数据放在上次end的空位处,此时start位置为空 array[end] = array[start]; end--;//end前移一位 } } array[start] = key;//将第一个位置的值放在空位置上 return start;//将分割位置的下标返回}void quick_sort(int *array,int start,int end){ int flag ;//用于保存分割左右两边的数组下标 if(start < end) { flag = partition(array,start,end); quick_sort(array,start,flag - 1);//左边排序 quick_sort(array,flag + 1,end);//右边排序 }}//输出数组内容void show(int *array,int length){printf("排序后的数组为:\n"); for(int i = 0;i < length;i++) { printf("%d\t",array[i]); } printf("\n");}
测试结果:
结果分析:
按照程序执行步骤逐步解析
声明:此文章为学习笔记,如有侵权请联系删除。