快速排序(Quicksort):是对冒泡排序的一种改进。
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分要小。
然后再按此方法对两部分分别进行排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
注:快速排序时一种不稳定的排序。
过程:
<1>设有数组a[0]……a[n-1],首先任选一个数(一般选第一个数)作为关键数据,然后把所有比它小的放在前边,比它大的放在后面。设i=0;j=n-1;key=a[0];
<2>从j开始向前搜索,直到找到一个小于key的值,交换位置。(a[i],a[j])
<3>从i开始向后搜索,直到找到一个大于key的值,交换位置。(a[i],a[j])
<4>重复2,3的,直到i=j;
代码如下:
#include "stdio.h" void main() { int i; int a[]={6,5,4,3,2,1,7,8,9}; void quickSort(int a[],int start,int end); /* 对函数的声明*/ quickSort(a,0,8); for(i=0;i<9;i++) printf("%d ",a[i]); getchar(); printf("hello what are you doing."); } void quickSort (int a[],int start,int end) { int temp; int i=start; int j=end; int key=a[i]; while(i<j) { while(i<j&&key<=a[j])/*找到第一个小于key的值*/ { j--; } if(i<j) { /*交换i,j的值*/ temp=a[i]; a[i]=a[j]; a[j]=temp; } while(i<j&&key>=a[i]) {i++;} if(i<j) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } if(i-start>1) quickSort(a,start,i-1); if(end-i>1) quickSort(a,i+1,end); }