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 }
快速排序算法采用分治法的策略,首先在數列中隨便選出一個數作為基準,將所有比基準小的數放在基準的前面,所有比基準大的數放在基準的后面,一趟走完之后,基準的位置已經完全確認了,數據被分成了兩部分,在將這兩部分遞歸進行上面的操作,即完成了快速排序的實現。
浙公網安備 33010602011771號