插入排序:
插入排序思想:考虑第i个元素,这时候前i-1个元素是有序的,这时候只要将第i个元素放到合适的位置即可。
伪代码:
void InsertSort(vector<int>& a){
for(int i=1;i<a.size();++i){
int key = a[i];
int j = i-1;
while(j>=0 && a[j] > key){
a[j+1] = a[j];
j=j-1;
}
a[j+1] = key;
}
}
时间复杂度:
归并排序:
归并排序的思想:
(1)将待排序序列从中间一分为二,对左右两边再进行递归分割操作,得到n个相互独立的子序列;
(2)对n个独立的子序列递归的执行合并操作,最终得到有序的序列。
伪代码:
void Merge(vector<int>& a,int low,int mid,int high){
vector<int> temp;
int left = low;
int right = mmid+1;
while(left <= mid && right <= high){
if(a[left] > a[right]){
temp.push_back(a[right]);
right++;
}else{
temp.push_back(a[left]);
left++;
}
}
while(left <= mid){
temp.push_back(a[left++]);
}
while(right <= high){
temp.push_back(a[right++]);
}
for(int i=0;i<temp.size();++i){
a[low+i] = temp[i];
}
}
void MergeSort(vector<int>& a,int low,int high){
int mid = (high+low)/2;
while(low<high){
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
Merge(a,low,mid,high);
}
}
时间复杂度: