快速排序C語言版圖文詳解
算法原理:選一個數位基準,將序列分成兩個部分,一邊全是比它小序列,另一邊全是比它大序列。然後再分別對比他小的序列和比再次進行基準分割。依次分割下去,得到一個有序的隊列。
原理圖示:
算法步驟圖示:
算法步驟
以序列首位數字位基準。下標為j的哨兵從右往左出發,找到一個比6小的數,停在該位置
下標為i的哨兵從左往右出發,找到一個比6大的數。
交換兩個哨兵的數字。
繼續該過程
直到兩個哨兵相遇,j哨兵往左移動發現3比6小停了下來,i哨兵往右移動,與j哨兵相遇,說明一輪探測結束,然後將基準移動到哨兵相遇的位置。
此時左邊數列均比6小,右邊數列均比6大。對左右序列一次進行如上步驟,獲得一個有序的數列。
void QuickSort(int unsorted[], int begin, int end) { if(begin > end) { return; } int temp = unsorted[begin]; int i = begin; int j = end; while(i != j) { while(unsorted[j] >= temp && j > i)//哨兵從右往左找 { j--; } while(unsorted[i] <= temp && j > i)//哨兵從左往右找 { i++; } if(j > i)//交換數值 { int temp1 = unsorted[i]; unsorted[i] = unsorted[j]; unsorted[j] = temp1; } } unsorted[begin] = unsorted[i]; unsorted[i] = temp; QuickSort(unsorted, begin, i-1); QuickSort(unsorted, i+1, end); }