快速排序:
在数组nums随机总选中一个数做对比nums[index];将数组nums中小于nums[index]的元素放在数组的左侧,将数组中大于nums[index]的元素放在数组的右侧;再分别对小于nums[index]序列和大于nums[index]的序列进行排序。代码如下:
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
using namespace std;
class Solution {
public:
int get_rand_num(int start, int end) {
return (rand() % (end-start+1))+ start;
}
void swap(vector<int>& nums, int a, int b) {
int tmp = nums[a];
nums[a] = nums[b];
nums[b] = tmp;
}
int partition(vector<int>& nums, int start, int end) {
if (start >= end) {
return -1;
}
int tmp_index = get_rand_num(start, end);
swap(nums, tmp_index, end);
int small = start -1;
for (int index = start; index < end; index++) {
if (nums[index] < nums[end]) {
if (index != small) {
small++;
swap(nums, small, index);
}
}
}
++small;
swap(nums, small, end);
return small;
}
int quick_sort(vector<int>& nums, int start, int end) {
if (start < 0 || end >= nums.size() || start >= end ) {
return start;
}
int index = partition(nums, start, end);
if (index > start && index < nums.size()) {
quick_sort(nums, start, index -1);
}
if (index < end && index > 0) {
quick_sort(nums, index + 1, end);
}
return index;
}
vector<int> sortArray(vector<int>& nums) {
int size = nums.size();
if (size ==0 ) {
return nums;
}
quick_sort(nums, 0, size -1);
return nums;
}
};
int main()
{
Solution solution;
std::vector<int> nums = {5,1,1,2,0,0};
solution.sortArray(nums);
for (int i = 0; i < nums.size(); i++)
{
printf("%d",nums[i]);
}
}