直接插入排序
快速排序
快速排序的不稳定性:会退化为O(n^2)
改良:pivot可以随机选取,但是依旧无法改变最坏时间复杂度
#include<bits/stdc++.h>
using namespace std;
int partition(int A[],int left,int right)
{
int temp=A[left];
while(left<right)
{
while(left<right && A[right]>temp) right--;
A[left]=A[right];
while(left<right && A[left]<temp) left++;
A[right]=A[left];
}
A[left]=temp;
return left;
}
void quicksort(int A[],int left,int right)
{
if(left<right)
{
int pos=partition(A,left,right);
quicksort(A,left,pos-1);
quicksort(A,pos+1,right);
}
}
int main()
{
return 0;
}
堆排序
堆排序就是利用完全二叉树中父节点与孩子结点的内在关系进行排序。
最坏时间复杂度也是O(nlogn),不会依据序列顺序而变化
不稳定,对小文件有效,对大文件无效
归并排序
不是原地排序,需要空间复杂度O(n)