码迷,mamicode.com
首页 > 编程语言 > 详细

冒泡排序和快速排序

时间:2015-12-30 22:07:01      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

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<n-i-1;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);  
  
}  

 

冒泡排序和快速排序

标签:

原文地址:http://www.cnblogs.com/dongzhuangdian/p/5089916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!