
快速排序
算法思路:
1、找到一個(gè)關(guān)鍵值(一般是第一個(gè)或者中值),將小于關(guān)鍵值的序列放在左邊,大于關(guān)鍵值的序列放在右邊
2、將左右兩個(gè)序列分別使用1過程(遞推過程)
3、最終各個(gè)序列退化至單個(gè)元素,遞歸開始回歸,整個(gè)序列有序
C++
//核心代碼
template <typename T>
//給關(guān)鍵值找到合適的位置,并返回所在的位置
int partition(T arr[],int low,int high){
//選取第一個(gè)值作為關(guān)鍵值(中軸值)
int keyValue = arr[low];
//j為最終的中軸索引值
int j = low;
for (int i = low + 1; i <= high; i++) {
if(arr[i] < keyValue){
swap(&arr[++j], &arr[i]);
}
}
swap(&arr[low], &arr[j]);
return j;
}
template <typename T>
void quickSort(T arr[],int low,int high){
//回歸條件
if (high>low) {
//1步驟
int q = partition(arr, low,high);
//2步驟
quickSort(arr, low, q-1);
quickSort(arr, q+1, high);
}
}