选择排序&插入排序&冒泡排序&快速排序算法实现

来源:互联网 发布:淘宝淘客微信群推广 编辑:程序博客网 时间:2024/05/16 01:19
#include<iostream.h>#include <stdio.h>//===========//排序算法////排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,//若经过排序,这些记录的相对次序保持不变,即在原序列中,//ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。//        稳定性  时间     空间  适用情况//1.选择  不稳定  O(n2)    O(1)    n较小时,对稳定性不作要求时宜用选择排序//2.插入  稳定    O(n2)    O(1)    速度较慢,但参加排序的序列局部或整体有序时;n值较小,要求稳定//3.冒泡  稳定    O(n2)    O(1)    速度较慢,但参加排序的序列局部或整体有序时;n值较小,要求稳定//4.快速  不稳定 O(nlog2n) O(1)    不适合有序序列;当n较大时,关键字元素比较随机,对稳定性没要求//选择排序void selectSort(int a[],int n){if(n<=0)return;int tmp,k;for(int i=0;i<n-1;i++){tmp=a[i];k=i;int j=i+1;while(j<=n-1){if(a[j]<tmp){tmp=a[j];k=j;}elsej++;}if(k!=i){a[k]=a[i];a[i]=tmp;}}}//插入排序void insertSort(int a[],int n){if(n<=0)return;for(int i=1;i<=n-1;i++){int tmp=a[i];for(int j=i-1;j>=0;j--){if(tmp<a[j]){a[j+1]=a[j];}else{break;}}a[j+1]=tmp;}}//冒泡排序void bubbleSort(int a[],int n){if(n<=0)return;int flag=0;for(int i=n-1;i>0;i--){flag=0;for(int j=0;j<i;j++){if(a[j]>a[j+1]){int tmp=a[j];a[j]=a[j+1];a[j+1]=tmp;flag=1;}if(flag==0)break;}}}//快速排序void quickSort(int a[],int s,int t){//判断参数if(s<0 || t<0)return;if(s > t)return;int i=s+1;int j=t;int x=a[s];while(i<=j){while(a[i]<=x && i<=j) i++;while(a[j]>=x && i<=j) j--;if(i<j){int tmp=a[i];a[i]=a[j];a[j]=tmp;i++;j--;}}if(s!=j){a[s]=a[j];a[j]=x;}if(s<j-1)quickSort(a,s,j-1);if(j+1<t)quickSort(a,j+1,t);}void output(int a[],int n){if(n<=0){cout<<endl;return;}for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;}//========测试用例========void Test1(){cout<<"测试用例1"<<endl;int a[]={2,4,6,3,8};int n=5;output(a,5);//selectSort(a,5);//insertSort(a,n);//bubbleSort(a,n);quickSort(a,0,n-1);output(a,5);}//数组中为1个元素void Test2(){cout<<"测试用例2"<<endl;int a[]={2};int n=1;output(a,n);//selectSort(a,n);//insertSort(a,n);//bubbleSort(a,n);quickSort(a,0,n-1);output(a,n);}void Test3(){cout<<"测试用例3"<<endl;int a[]={2};int n=0;output(a,n);//selectSort(a,n);//insertSort(a,n);//bubbleSort(a,n);quickSort(a,0,n-1);output(a,n);}void main(){Test1();Test2();Test3();}

0 0