排序算法-冒泡排序

Posted 梦想田园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-冒泡排序相关的知识,希望对你有一定的参考价值。

#include<iostream>
using namespace std;
//冒泡排序
/*
冒泡排序的思想很简单,就是不断将最大的元素往后移动,第一次扫描,会将最大的元素移动到最后,然后再用类似的方式排序前n-1个元素。
当然冒泡排序实现可以通过递归实现,也可以通过循环迭代实现。
*/
//使用递归实现的冒泡排序
void BubbleSortByRecursion(int list[],int size)

    if(size<=1)//当仅剩一个元素时无需排序
        return;
    for(int i=0;i<size-1;i++)//通过冒泡的形式,将最大的元素放到需要排序数组的最后边
    
        if(list[i]>list[i+1])
        
            int temp=list[i];
            list[i]=list[i+1];
            list[i+1]=temp;
        
    
    BubbleSortByRecursion(list,size-1);//将剩下的未排序的数组进行排序

//使用迭代实现的冒泡排序
void BubbleSortByIteration(int list[],int size)

    for(int i=size;i>0;i--)//要排序的元素个数不断减少
        for(int j=0;j<i-1;j++)//将最大元素移动到要排序的部分的最后边
            if(list[j]>list[j+1])
            
                int temp=list[j];
                list[j]=list[j+1];
                list[j+1]=temp;
            

//冒泡排序的改进
/*
要知道冒泡排序的平均复杂度为O(n*n),可以通过一定的方式进行改善,如当某次排序移动元素的个数为0时,表示已经排好序,应停止。
*/
//优化后的冒泡排序
void BubbleSortOptimize(int list[],int size)

    int nCount=0;
    for(int i=size;i>0;i--)
    
        nCount=0;
        for(int j=0;j<i-1;j++)
            if(list[j]>list[j+1])
            
                int temp=list[j];
                list[j]=list[j+1];
                list[j+1]=temp;
                nCount++;
            
        if(nCount==0)//当移动次数为0时,排序停止
            break;
    

//此外快速排序也是对冒泡排序的改进,通过比较用递归实现的冒泡排序和用递归实现的快速排序,就能明白这一点了
//快速排序可参看:http://blog.csdn.net/u010968153/article/details/51767726
int main()

    int list[]=5,6,6,4,3,1,2,6,7,8;
    BubbleSortOptimize(list,10);
    for(int i=0;i<10;i++)
        cout<<list[i]<<" ";
    cout<<endl;

以上是关于排序算法-冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法系列:冒泡排序与双向冒泡排序

十大经典排序算法总结(冒泡排序)

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

冒泡排序算法和选择排序算法比较

算法|排序算法-冒泡排序