快速排序与归并排序的模板
快速排序与归并排序是两种常见的基础排序算法,时间复杂度为logn。
快速排序
算法思想:1.找到哨兵数,我喜欢用中间的数a[l+r>>1]
2.是用双指针i和j,分别从队首和队尾遍历,如果a[i]>mid则i指针停止,如果a[j]<mid则j指针停止,然后交换a[i]和a[j]
3.分别快速排序前一段与后一段
算法模板:
void quick_sort(int a[],int l,int r) { if(l>=r) return; int mid=a[l+r>>1]; int i=l-1,j=r+1; while(j>i) { do i++;while(a[i]<mid); do j--;while(a[j]>mid); if(j>i) swap(a[i],a[j]); } quick_sort(a,l,j),quick_sort(a,j+1,r); }
归并排序
算法思想:1.递归处理
2.将两段数组合并
算法模板:
void merge_sort(int a[],int l,int r) { if(l>=r) return; int mid=l+r>>1; merge_sort(a,l,mid),merge_sort(a,mid+1,r); int k=0,i=l,j=mid+1; while(i<=mid&&j<=r) { if(a[i]<=a[j]) temp[k++]=a[i++]; else temp[k++]=a[j++]; } while(i<=mid) temp[k++]=a[i++]; while(j<=r) temp[k++]=a[j++]; for(int i=l,j=0;i<=r;i++,j++) a[i]=temp[j]; }

浙公网安备 33010602011771号