白话经典算法系列之一 冒泡排序的三种实现(转)

来源:互联网 发布:淘宝图片空间怎么清空 编辑:程序博客网 时间:2024/05/21 14:04
#include<iostream>using namespace std;//交换两个数,这里用到了引用void Swap(int &a, int &b){    int temp;    temp = a;    a = b;    b = temp;    return ;}void BubbleSort1(int a[], int len){    int i,j;    for (i =0 ; i < len; i++)    {        for(j = 1; j < len - i; j++)                   // 这层的循环,注意 len - i        {            if (a[j-1] > a[j])            {                Swap(a[ j-1], a[j]);                     }        }    }    return ;}/* 优化这个版本 * 设置一个标志flag, 如果这一趟(某一轮循环)发生了交换,设置为true;如果有一趟(一轮)没有发生交换 * 说明排序已经排好,设置为false*/void BubbleSort2(int a[], int len){    int i, j, k;    bool flag;    k = len;                                                  //控制外层循环    flag = true;                                            //初始时,需要排序    while(flag)    {        flag = false;                                     //设置flag 不需要排序,如果循环里面把flag置成true了,说明需要操作        for (j =1 ; j < k; j++)        {            if (a[j - 1] > a[j])            {                Swap(a[ j-1], a[j]);                       //交换数值                flag =  true;                               //需要排序操作            }        }       k--;    }       return ;}/*如果有10个数的数组,仅前面5个数无序,后面5个已经排序好了且都大于前面的5个数 * 在第一趟遍历之后,后面发生的交换的位置必定小于5,且这个位置之后的数据必定已经排好序了 *记录下这个位置,第二次只要从数组头部遍历到这个位置就行*/void BubbleSort3(int a[], int len){    int i, j, k;    int flag;    flag = len;                                                //控制外层循环    while(flag >0)    {        k = flag ;              flag = 0;        for (j =1 ; j < k; j++)                         //第一轮循环结束了之后,知道flag后面的数已经拍好了        {            if (a[j - 1] > a[j])            {                Swap(a[ j-1], a[j]);                       //交换数值                flag = j;                                    //需要排序操作            }        }    }       return ;}int main(){    int i;    int N =10;                                                    //数组个数    int s[10] = {72,6,57,88,60,42,83,73,48,85};         //初始化    //int s[10] = {48,6,57,60,42,72,73,83,85,88};         //初始化    for(i = 0;  i < 9; i++)        cout<< s[i] <<" ";    cout<<endl;    //quick_sort(s, 0, 10-1);                                     //快速排序    //BubbleSort1(s,N);    //BubbleSort2(s,N);    BubbleSort3(s,N);    //输出排序后的数组    for(i = 0;  i < 9; i++)        cout<< s[i] <<" ";    return 0;}
0 0