冒泡排序以及冒泡排序的优化

很早接触过冒泡排序法,但一直没有真正的理解,只是为了记住而学习,今天又重新看了一下,其实冒泡排序法第一次排序会把最大的冒到最上面,第二次会把次大的泡冒到最大的后面,一次类推····,另外在排序的次数上会逐渐减少。看代码:

void bubble_sort(int *a,int n)
{
    for(int i=0;i<n;i++)
        for(int j = 1;j<n-i;j++)
        {
            if(a[j-1]>a[j])
                swap(&a[j-1],&a[j]);
        }
}

其实还可以优化一下,当发现没有进行交换证明已经排好了就跳出循环。

void bubble_sort2(int *a,int n)
{
    bool flag = true;
    int k = n;
    while(flag)
    {
        flag = false;
        for(int i=1;i<k;i++)
        {
            if(a[i-1]>a[i])
            {
                swap(&a[i-1],&a[i]);
                flag = true;
            }
        }
        k--;
    }
}

测试代码:

#include <iostream>
using namespace std;

void bubble_sort(int *a,int n);
void bubble_sort2(int *a,int n);

void swap(int *a,int *b)
{
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}

int main()
{
    int a[10]={5,3,2,7,4,9,6,8,24,13};
    bubble_sort2(a,10);
    for(int i = 0;i<10;i++)
    {
        cout<<a[i]<<endl;
    }
    getchar();
    return 0;
}
原文地址:https://www.cnblogs.com/onlycxue/p/2953788.html