前言
关于排序算法,个人已经学习了前三种人称乌龟速三兄弟的算法
下面就是快速排序算法啦~
快速排序(quick_sort)
从数列中挑出一个元素,称为 “基准”(pivot)
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分(partition)操作。递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
个人基于原理的c语言代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<stdio.h> void quick_sort(int data[],int left,int right); int get_mid(int data[],int l,int r); int main(){ int i; int data[9]={3,4,1,6,2,8,7,9,5}; quick_sort(data,0,9); for(i=0;i<9;i++) printf("%d ",data[i]); return 0; } void quick_sort(int data[],int left,int right){ int mid; if(left<right){ mid=get_mid(data,left,right); quick_sort(data,left,mid-1); quick_sort(data,mid+1,right); } } int get_mid(int data[],int l,int r){ int tmp=data[l]; while (l<r){ while(l<r&&data[r]>=tmp)r--; data[l]=data[r]; while(l<r&&data[l]<=tmp)l++; data[r]=data[l]; } data[l]=tmp; return l; }
|