基础算法学习---quick_sort && merge_sort
quick_sort模板
void quick_sort(int q[] ,int l ,int r){
//不满足条件直接返回
if( l >= r ) return;
//建议取l + r >> 1,避免边界问题
int x = q[l + r >> 1],i = l -1,j = r + 1;
while(i < j){
do i ++; while(q[i] < x);
do j --; while(q[j] > x);
if( i < j) swap(q[i],q[j]);
else break;
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
注意边界问题。
merge_sort模板
void merge_sort(int q[],int l,int r){
//判断是否需要排序
if ( l >= r ) return;
int mid = l + r >> 1;
merge_sort(q,l,mid);
merge_sort(q,mid + 1,r);
//排序存入temp数组
int i = l,j = mid + 1,k = 0;
while(i <= mid && j <= r){
if(q[i] < q[j]) temp[k++] = q[i++];
else temp[k++] = q[j++];
}
while(i <= mid) temp[k++] = q[i++];
while(j <= r) temp[k++] = q[j++];
//归还
for(i = l,j = 0;i <= r; i ++,j ++ ) q[i] = temp[j];
}
归还避免空间浪费
acwing-------基础算法