提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
给定一个长度为 n 的数组,请你编写一个函数,返回该数组排序后的结果
前言
数据范围: 0 \le n \le 10000000≤n≤1000000,数组中每个元素都满足 0 \le val \le 10000000000≤val≤1000000000
要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)
插入排序
冒泡排序
改进的是插入排序,下面比较一下冒泡排序和插入排序:
插入排序是流动的后边的无序的数插入到固定的前边有序的数列,前边形成的有序的序列是可以改变的。而冒泡排序是是前边无限的数字一个个与自己后边相邻的数字比较,直到把最大的数字放在最后,以此为例,后边形成的是一个有序的数,且是不变的。
快速排序
void Quick_Sort(int *arr, int begin, int end){
if(begin > end)
return;
int tmp = arr[begin];
int i = begin;
int j = end;
while(i != j){
while(arr[j] >= tmp && j > i)
j–;
while(arr[i] <= tmp && j > i)
i++;
if(j > i){
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
arr[begin] = arr[i];
arr[i] = tmp;
Quick_Sort(arr, begin, i-1);
Quick_Sort(arr, i+1, end);
}
int* MySort(int* arr, int arrLen, int* returnSize ) {
// write code here
*returnSize = arrLen;
Quick_Sort(arr, 0, arrLen-1);
return arr;
}
参考文章:
快速排序详解
堆排序
待续
二分查找
待续
选择排序
参考文章:
选择排序
总结
直接用快排,简单还好用