排序算法-冒泡排序

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值