题解 | #排序#
排序
http://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896
一、快速排序
class Solution {
public:
void quicksort(vector<int>& arr, int l, int r) {
if (l >= r) return;
int i = l, j = r, mid = arr[(l + r) / 2];
while (i <= j) {
while (arr[i] < mid) i++;//在左半部分寻找比中间数大的数
while (arr[j] > mid) j--;//在右半部分寻找比中间数小的数
if (i <= j) {
swap(arr[i], arr[j]);//若找到一组与排序目标不一致的数对则交换它们
i++, j--;//继续找
}
}
quicksort(arr, l, j);//若未到两个数的边界,则递归搜索左右区间
quicksort(arr, i, r);
return;
}
vector<int> MySort(vector<int>& arr) {
quicksort(arr, 0, arr.size() - 1);
return arr;
}
};
leetcode题解
class Solution {
public:
vector<int> sortArray(vector<int>& nums) {
quickSort(nums, 0, nums.size()-1);
return nums;
}
void quickSort(vector<int>& nums, int l, int r) {
if (l >= r) return;
int i = l, j = r, mid = nums[(l+r)/2];
while (i <= j) {
while (nums[i] < mid) i++;
while (nums[j] > mid) j--;
if (i <= j) {
swap(nums[i], nums[j]);
i++, j--;
}
}
quickSort(nums, l, j);
quickSort(nums, i, r);
return;
}
};
二、冒泡排序
class Solution {
public:
vector<int> MySort(vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
return arr;
}
};
