快速排序
inline void QuickSort(int arr[], int L, int R){ //The Quick Sort
if (L >= R)
return;
int i = L, j = R;
int mid = arr[L];
while(i < j){
while(i < j && arr[j] >= mid) --j;
arr[i] = arr[j];
while (i < j && arr[i] <= mid) ++i;
arr[j] = arr[i];
}
arr[i] = mid; // i = j
QuickSort(arr, L, i - 1);
QuickSort(arr, i + 1, R);
}
class Solution {
public:
inline int QuickSort(vector<int> arr, int L, int R, int K) { //The Quick Sort
int i = L, j = R;
int mid = arr[L];
while (i < j) {
while (i < j && arr[j] >= mid) --j;
arr[i] = arr[j];
while (i < j && arr[i] <= mid) ++i;
arr[j] = arr[i];
}
arr[i] = mid;
if (i + 1 == K) return arr[i];
else if (i + 1 > K) return QuickSort(arr, L, i - 1, K);
else return QuickSort(arr, i + 1, R, K);
}
int findKth(vector<int> a, int n, int K) {
return QuickSort(a, 0, n - 1, n - K + 1);
}
};
选择排序
inline void SelectionSort(int L, int R){ //The Selection Sort
int i, j, minn;
for(i = L; i < R; i++){
minn = i;
for(j = i + 1; j <= R; j++)
if(a[minn] > a[j])
minn = j;
swap(a[i], a[minn]);
}
}
冒泡排序
inline void BubbleSort(int L, int R){ //The Bubble Sort with optimization
int i, j;
bool flag;
for(i = L; i < R; i++){
flag = true;
for(j = L; j < R - i + L; j++){ //The number behind the R-i+L has been sorted
if(a[j] > a[j+1]){
swap(a[j], a[j+1]);
flag = false;
}
}
if(flag)break;
}
}
归并排序
inline void MergeSort(int L, int R){ //The Merge Sort
if(L >= R) return;
int mid = (L + R) / 2;
MergeSort(L, mid);
MergeSort(mid + 1, R);
int i = L, j = mid + 1, k = L;
while(i <= mid && j <= R){
if(a[i] < a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
}
while(i <= mid)b[k++] = a[i++];
while(j <= R) b[k++] = a[j++];
for(i = L; i <= R; i++)
a[i] = b[i];
}
插入排序
inline void InsertionSort(int L, int R){ //The Insertion Sort
int i, j, temp;
for(i = L + 1; i <= R; i++){
temp = a[i];
for(j = i; j > L && a[j-1] > temp; j--)
a[j] = a[j-1];
a[j] = temp;
}
}
待更新,或不更新(: