冒泡排序的初级优化及递归

  1. 冒泡排序
  2. 方法及优化
    2.1普通方法
    2.2递归方法
    2.3简单优化方法
    3.总结

一. 冒泡排序
简述:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成(copy from baidu)
二.方法及优化
普通方法:①大循环遍历n-1次,用i记录每次的变化②小循环遍历(n-i)次③小循环内满足条件则交换
代码如下:

class BubbleSort {
public:
    int* bubbleSort(int* a, int n) 
    {
        // write code here
        for(int i=0;i<n-1;i++)
            for(int j=0;j<n-i-1;j++)
            {
               if(a[j]>a[j+1])
               {
                    int temp=a[j+1];
                    a[j+1]=a[j];
                    a[j]=temp;
               }
            }
        return a;
    }
};

递归方法:①起始位置不变,递归过程修改数组大小

#include<iostream>
using namespace std;
void bubbleSort(int *data, int end)
{
    if (end>0) {
        for (int i = 0; i < end- 1; i++) 
        {
            if (data[i] > data[i + 1]) 
            {
                int temp = data[i];
                data[i] = data[i + 1];
                data[i + 1] = temp;
            }
        }
        end--;
        bubbleSort(data, end);
    }
}
void main()
{
    int a[] = { 1, 7, 9, 3, 2, 5,6,7,8 };
    bubbleSort(a,9);
    for(int i=0;i<sizeof(a)/sizeof(int)-1;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}

代码如下:
简单优化方法:①小循环没有进行交换则退出
代码如下:

class BubbleSort {
public:
    int* bubbleSort(int* a, int n) 
    {
        // write code here
        bool flag=true;
        for(int i=0;i<n-1,flag==true;i++)
        {
            flag=false;
            for(int j=0;j<n-i-1;j++)
            {
               if(a[j]>a[j+1])
               {
                    int temp=a[j+1];
                    a[j+1]=a[j];
                    a[j]=temp;
                    flag=true;
               }
            }

        }
        return a;
    }
};

扩展:
进一步优化算法:

http://blog.csdn.net/tjunxin/article/details/8711389

三.总结
I.最常见的问题里面往往蕴涵很多小知识,小细节,许多积累II.让我们一同努力,明天会更好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值