快速排序
int partion(vector<int> &nums, int begin, int end){
int x = nums[end], i = begin - 1;
for (int j = begin; j < end; j++){
if (nums[j] <= x){
swap(nums[++i], nums[j]);
}
}
swap(nums[++i], nums[end]);
return i;
}
void quickSort(vector<int> &nums,int begin,int end){
if (begin < end){
int q = partion(nums, begin, end);
quickSort(nums, begin, q - 1);
quickSort(nums, q + 1, end);
}
}
歸併排序
void merge(vector<int> &nums, int begin, int end, int mid){
vector<int> temp(end - begin + 1);
int i = begin, j = mid + 1, k = 0;
while (i <= mid && j <= end){
if (nums[i] <= nums[j]){
temp[k++] = nums[i++];
}
else{
temp[k++] = nums[j++];
}
}
while (i <= mid){
temp[k++] = nums[i++];
}
while (j <= end){
temp[k++] = nums[j++];
}
for (int x = begin; x <= end; x++){
nums[x] = temp[x - begin];
}
}
void mergeSort(vector<int> &nums, int begin, int end){
if (begin < end){
int mid = (begin + end) >> 1;
mergeSort(nums, begin, mid);
mergeSort(nums, mid + 1, end);
merge(nums, begin, end, mid);
}
}
堆排序
void HeapAdjust(vector<int> &nums, int start, int end){
int large = start, l = start * 2 + 1, r = start * 2 + 2;
if (l<end && nums[l]>nums[large]) large = l;
if (r<end && nums[r]>nums[large]) large = r;
if (large != start){
swap(nums[start], nums[large]);
HeapAdjust(nums, large, end);
}
}
void HeapSort(vector<int> &nums){
int len = nums.size();
for (int i = len / 2 - 1; i >= 0; i--)
HeapAdjust(nums, i, len);
for (int i = len - 1; i > 0; i--){
swap(nums[i], nums[0]);
HeapAdjust(nums, 0, i);
}
}
插入排序
void insertSort(vector<int> &nums) {
if (nums.size() < 2)
return;
for (int i = 1; i < nums.size(); i++) {
int x = nums[i];
for (int j = i - 1; j >= 0; j--) {
if (x <= nums[j])
nums[j + 1] = nums[j];
else {
nums[j + 1] = x;
break;
}
}
}
}
GitHub-Leetcode:https://github.com/wenwu313/LeetCode