排序算法-冒泡排序

来源:互联网 发布:网络拍卖平台靠谱 编辑:程序博客网 时间:2024/05/30 05:22
#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;
}
1 0
原创粉丝点击