1 //参数说明: 2 // int data[] : 待排序的数据数组 3 // int m : 下限值 4 // int n : 上限值 5 void QuickSort ( int data[] , int m , int n) 6 { 7 int i , j , x; 8 9 i = m; 10 j = n; 11 x = data[i]; //取数组的第一个数作为基准值 12 13 while ( i < j ) 14 { 15 while( ( i < j ) && ( x < data[j] ) ) 16 { 17 j--; 18 } 19 if ( i < j ) 20 { 21 data[i] = data[j]; 22 i++; 23 } 24 else 25 break; 26 27 while( ( i < j ) && ( x > data[i] ) ) 28 { 29 i++; 30 } 31 if ( i < j ) 32 { 33 data[j] = data[i]; 34 j--; 35 } 36 else 37 break; 38 } 39 40 data[i] = x; //循环结束后,基准值的位置已经确定 41 //对基准值两边的子数列进行递归操作,最终完成排序 42 QuickSort ( data , m , i - 1 ); 43 QuickSort ( data , i + 1 , n); 44 }
快速排序算法采用分治法的策略,首先在数列中随便选出一个数作为基准,将所有比基准小的数放在基准的前面,所有比基准大的数放在基准的后面,一趟走完之后,基准的位置已经完全确认了,数据被分成了两部分,在将这两部分递归进行上面的操作,即完成了快速排序的实现。