C++三种排序,快速排序、选择排序、冒泡排序----简单代码

来源:互联网 发布:淘宝助理上传字段错误 编辑:程序博客网 时间:2024/05/21 22:28

直接把解释,就放到注解了。。。

 

//冒泡排序
#include<iostream>
using namespace std;
void main()
{
 int n=5,count=0;       //根据需要改N的值
 int i,j,temp,a[5];
 cout <<"input the five num:";
 for(i=0;i<n;i++) cin>>a[i]; //输入数据

 for(j=0;j<n;j++)
 {
  for(i=0;i<n-j;i++)   //每一次都沉淀至少一个元素,所有i要小于n-j
  {
    if(a[i]>a[i+1])    //前后两个值的比较
  { 
   temp=a[i];
   a[i]=a[i+1];
   a[i+1]=temp;//这三行,不解释了
    }
    count++;//统计次数
  }
 } 
  
 for(i=0;i<n;i++)
 cout <<a[i]<<" ";
    cout<<"counter:"<<count;
    cout<<"\n";
}


//时间复杂度我计算的是n*(n+1)/2;这个是个人计算,不做参考,书上给的是n^2

 

//选择排序
#include<iostream>
using namespace std;
 void main()
{
 int n=5,count=0;
 int i,j,temp,a[5];
 cout <<"input the five num:";
 for(i=0;i<n;i++) cin>>a[i];

 for(i=0;i<n;i++)
 {  int min=a[i];
  for(j=i+1;j<n;j++)//当i确定时候,j要从i+1开始
  {
   if(a[i]>a[j])//比较a[i],a[j]的值,找出比较小的,最后放前面
   {
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;  
   }
  count++;
  }
 }


 for(i=0;i<n;i++)
 cout <<a[i]<<" ";
    cout<<"counter:"<<count;
    cout<<"\n";
}
时间复杂度为n*(n-1)/2


//快速排序
#include<iostream>
using namespace std;

void qsort(int array[],int l,int r)
{
  int i,j,k;
  if(l<r)           //这是前提
  {
   i=l;j=r;k=array[i];
   do{
     while((i<j)&&(array[j]>=k))//如果条件满足,则进行j--,右边下标,向左移一位
   j--;
  if(i<j)
  {
   array[i]=array[j];      //如果条件不满足,则说明此处值比K要小,要互换两处的数值
  }

  while((i<j)&&(array[i]<=k))
   i++;
  if(i<j)
  {
   array[j]=array[i];
  }
   }while(i!=j);     //只是进行一次快速查找
   array[i]=k;
   qsort(array,l,i-1);    //递归算法,分别进行中轴左边和右边的算法
   qsort(array,i+1,r);
  }
}

void main()
{
 int n=5;
 int i,j,temp,a[5];
 cout <<"input the five num:";
 for(i=0;i<n;i++) cin>>a[i];

 qsort(a,0,n-1);//调用函数了
  
 for(i=0;i<n;i++)
 cout <<a[i]<<" ";
    cout<<"\n";
}

 

 

 

其实,我也是昨天和今天狂加班才搞明白,这些算法,杯具的是,明天就要参加绿盟的WEB应用开发实习生的面试。。。祈祷!!!

原创粉丝点击