冒泡排序和快速排序

1 冒泡排序

void Bubble(int r[],int n)
{
     int i,j,temp;
     for(i=0;i<n;i++)
  {
    for(j=0;j<n-i-1;j++)
    if(r[j]>r[j+1])
    {
      temp=r[j];
      r[j]=r[j+1];
       r[j+1]=temp;
    }
  }
}

改进后的算法

void Bubble(int r[],int n)
{
     int i=n-1,pos;
    while(i>0)
  {  
    pos=0;
    for(j=0;j<i;j++)
    {
      if(r[j]>r[j+1])       {         pos=j;         temp=r[j];         r[j]=r[j+1];          r[j+1]=temp;
      }     } i
=pos;   } }

改进算法避免了在排序中对上次已经得知顺序后,下次比较时还需要再比较的问题

 

2 快速比较

 

void print(int a[], int n){  
    for(int j= 0; j<n; j++){  
        cout<<a[j] <<"  ";  
    }  
    cout<<endl;  
}  
  
void swap(int *a, int *b)  
{  
    int tmp = *a;  
    *a = *b;  
    *b = tmp;  
}  
  
int partition(int a[], int low, int high)  
{  
    int privotKey = a[low];                             //基准元素  
    while(low < high){                                   //从表的两端交替地向中间扫描  
        while(low < high  && a[high] >= privotKey) --high;  //从high 所指位置向前搜索,至多到low+1 位置。将比基准元素小的交换到低端  
        swap(&a[low], &a[high]);  
        while(low < high  && a[low] <= privotKey ) ++low;  
        swap(&a[low], &a[high]);  
    }  
    print(a,10);  
    return low;  
}  
  
  
void quickSort(int a[], int low, int high){  
    if(low < high){  
        int privotLoc = partition(a,  low,  high);  //将表一分为二  
        quickSort(a,  low,  privotLoc -1);          //递归对低子表递归排序  
        quickSort(a,   privotLoc + 1, high);        //递归对高子表递归排序  
    }  
}  
  
int main(){  
    int a[10] = {3,1,5,7,2,4,9,6,10,8};  
    cout<<"初始值:";  
    print(a,10);  
    quickSort(a,0,9);  
    cout<<"结果:";  
    print(a,10);  
  
}  

 

posted @ 2015-12-30 20:01  小德cyj  阅读(244)  评论(0编辑  收藏  举报