归并与快排算法

来源:互联网 发布:广电网络缴费 编辑:程序博客网 时间:2024/05/16 11:50

代码:

//归并排序 #include <bits/stdc++.h>using namespace std;const int maxn=1000;int temp[maxn],temp1[maxn];void Merge(int *a,int s,int m,int e,int *tmp){int pb=0;int p1=s,p2=m+1;while(p1<=m&&p2<=e){if(a[p1]<a[p2])tmp[pb++]=a[p1++];elsetmp[pb++]=a[p2++];}while(p1<=m)tmp[pb++]=a[p1++];while(p2<=e)tmp[pb++]=a[p2++];for(int i=0;i<e-s+1;i++)a[s+i]=tmp[i];}void MergeSort(int *a,int s,int e,int *tmp){if(s<e){int m=s+(e-s)/2;MergeSort(a,s,m,tmp);MergeSort(a,m+1,e,tmp);Merge(a,s,m,e,tmp);}}int main(int argc,char *argv[]){//freopen("data.in.txt","r",stdin);int n;cout<<"请输入需要排序的数的个数:";cin>>n;cout<<endl;cout<<"请输入需要排序的数:"<<endl;for(int i=0;i<n;i++)cin>>temp[i];MergeSort(temp,0,n-1,temp1);for(int i=0;i<n;i++)cout<<temp[i]<<" "; return 0;}

//快速排序#include <bits/stdc++.h>using namespace std;const int maxn=10000;int temp[maxn];void QuickSort(int *a,int s,int e){if(s>=e)return ; int i=s,j=e;int k=a[(s+e)/2];while(i!=j){while(i<j&&k<=a[j])j--;if(i==j)break;swap(a[i],a[j]);while(i<j&&k>=a[i])i++;swap(a[i],a[j]);}for(int i=s;i<=e;i++)cout<<a[i]<<",";cout<<endl;QuickSort(a,s,i-1);QuickSort(a,i+1,e);}int  main(int argc,char *argv[]){//freopen("data.in.txt","r",stdin);int n;cout<<"请输入需要排序的数的个数:";cin>>n;cout<<endl;cout<<"请输入需要排序的数:"<<endl;for(int i=0;i<n;i++)cin>>temp[i];QuickSort(temp,0,n-1);for(int i=0;i<n;i++)cout<<temp[i]<<" "; return 0;}