快速排序与归并排序(递归)
本文最后更新于300 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

快速排序

#include<iostream>

using namespace std;
void quick_sort(int* a, int left, int right) {
	int l = left-1;
	int r = right+1;
	if(left>=right)
		return ;
	int k = a[left];
	while(l<r){
		do l++;	while(a[l]<k);
		do r--;	while(a[r]>k);
		if(l<r) 
			swap(a[l],a[r]);
	}
	quick_sort(a,left,r);
	quick_sort(a,r+1,right);
	return ;
}

int main() {
	int a[10] = { 5,9,8,2,4,25,35,598,3592,20 };
	
	quick_sort(a, 0, 9);
	for (int i = 0;i < 10;i++) {
		printf("%d ", a[i]);
	}

}

归并排序

#include<iostream>
#include<cstring>
using namespace std;
const int N=1e3+10; 
void mergearray(int *a,int start,int mid,int last){
	int i = start,j = mid+1;
	int k =0 ;
	int n = mid,m = last;
	int temp[N];
	while(i<=n&&j<=m){
		if(a[i]<=a[j])
			temp[k++]=a[i++];
		else
			temp[k++]=a[j++];
			
	}
	while(i<=n)
		temp[k++]=a[i++];
	while(j<=m)
		temp[k++]=a[j++];
	for(i = 0;i<k;i++)
		a[start + i] = temp[i];
}

void mergesort(int *a,int start,int last){
	if(start>=last)	return ;
	int mid = (start+last)/2;
	mergesort(a,start,mid);
	mergesort(a,mid+1,last);
	mergearray(a,start,mid,last);
	
}

int main(){
	int arr[N];
	int n;
	cin>>n;
	for(int i =0 ;i<n;i++)
		cin>>arr[i];
	mergesort(arr,0,n-1);
	for(int i =0;i<n;i++)
		cout<<arr[i]<<' ';
	return 0;
	
} 
如果觉得本文对您有所帮助,那这将是对我最大的鼓励,期待您留下您宝贵的评论。
暂无评论

发送评论 编辑评论


				
上一篇
下一篇