排序算法test

来源:互联网 发布:海康网络键盘 编辑:程序博客网 时间:2024/06/03 20:06
#include<iostream>#include<vector>using namespace std;#define len 15int data[len]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};void show(vector<int> showdata){for(int i=0;i<len;i++)cout<<showdata[i]<<" ";cout<<endl;}void bubble(int data[]){vector<int> bubble_data;for(int i=0;i<len;i++){bubble_data.push_back(data[i]);}for(int i=0;i<len-1;i++)for(int j=1;j<len-i;j++)if(bubble_data[j-1]>bubble_data[j])swap(bubble_data[j-1],bubble_data[j]);cout<<"result of bubble sort: "<<endl;show(bubble_data);}void select(int data[]){vector<int> select_data;for(int i=0;i<len;i++){select_data.push_back(data[i]);}int curmin,k;for(int i=0;i<len-1;i++){ k=i;curmin=select_data[i];for(int j=i+1;j<len;j++)if(select_data[j]<curmin){curmin=select_data[j];k=j;}if(k!=i)swap(select_data[i],select_data[k]);}cout<<"result of select sort: "<<endl;show(select_data);}void insert(int data[]){vector<int> insert_data;for(int i=0;i<len;i++)insert_data.push_back(data[i]);for(int i=1;i<len;i++)for(int j=i-1;j>=0;j--)if(insert_data[j+1]<insert_data[j])swap(insert_data[j+1],insert_data[j]);cout<<"result of insert sort: "<<endl;show(insert_data);}void mergearr(vector<int>&source,vector<int>tmp,int start,int mid,int end){int i=start,j=mid+1,k=start;while(i<=mid&&j<=end){if(source[i]<=source[j])tmp[k++]=source[i++];elsetmp[k++]=source[j++];}while(i<=mid)tmp[k++]=source[i++];while(j<=end)tmp[k++]=source[j++];for(i=start;i<=end;i++)source[i]=tmp[i];}void mergesort(vector<int> &source,vector<int>tmp,int start,int end){if(start<end){    int mid=(start+end)/2;mergesort(source,tmp,start,mid);mergesort(source,tmp,mid+1,end);mergearr(source,tmp,start,mid,end);}}void merge(int data[]){vector<int> merge_data;for(int i=0;i<len;i++)merge_data.push_back(data[i]);vector<int>tmp(len,0);mergesort(merge_data,tmp,0,len-1);cout<<"result of merge sort: "<<endl;show(merge_data);}void quicksort(vector<int>&source,int start,int end){if (start>=end) return;int k=start,cur=source[k],i;int h=start;for(i=k+1;i<=end;i++)if(source[i]<cur)swap(source[++h],source[i]);swap(source[k],source[h]);quicksort(source,k,h-1);quicksort(source,h+1,end);}void quick(int data[]){vector<int> quick_data;for(int i=0;i<len;i++)quick_data.push_back(data[i]);quicksort(quick_data,0,len-1);cout<<"result of quick sort: "<<endl;show(quick_data);}void rquick(int data[],int r){vector<int> quick_data;for(int i=0;i<len;i++)quick_data.push_back(data[i]);swap(data[0],data[r]);quicksort(quick_data,0,len-1);cout<<"result of rquick sort: "<<endl;show(quick_data);}void count(int data[]){vector<int> count_data;for(int i=0;i<len;i++)count_data.push_back(data[i]);int i,j,c;vector<int> tmp(len,0);for(i=0;i<len;i++){c=0;for(j=0;j<len;j++)if(data[j]<data[i])c++;while(tmp[c]!=0)c++;tmp[c]=data[i];}cout<<"result of count sort: "<<endl;show(tmp);}void radix(int data[]){vector<int> radix_data;for(int i=0;i<len;i++)radix_data.push_back(data[i]);////find the max number of the dataint max_num=radix_data[0];for(int i=1;i<len;i++)if(radix_data[i]>max_num)max_num=radix_data[i];////find max digitint c=1;while(max_num/10){c++;max_num=max_num/10;}int idx,b=1;for(int j=0;j<c;j++){vector<vector<int>> tmp(10);b=b*10;for(int i=0;i<len;i++){idx=(10*radix_data[i]/b)%b;tmp[idx].push_back(radix_data[i]);}int m=0;for(int k=0;k<10;k++){for(int h=0;h<tmp[k].size();h++)radix_data[m++]=tmp[k][h];}}cout<<"result of radix sort: "<<endl;show(radix_data);}int main(){cout<<"sort the data:"<<endl;for(int i=0;i<len;i++)cout<<data[i]<<" ";cout<<endl;char select_sort;cout<<"please select 'b'=bubble 's'=select 'i'=insert 'm'=merge 'q'=quick 'rq'=rquick 'c'=count 'r'=radix"<<endl;while(cin){cin>>select_sort;switch(select_sort){case 'b':bubble(data);break;case 's':select(data);break;case 'i':insert(data);break;case 'm':merge(data);break;case 'q':quick(data);break;case 'rq':rquick(data,8);break;case 'c':count(data);break;case 'r':radix(data);break;cout<<"please select 'b'=bubble 's'=select 'i'=insert 'm'=merge 'q'=quick 'rq'=rquick 'c'=count 'r'=radix"<<endl;}}system("pause");return 0;}

0 0