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

来源:互联网 发布:表格算量软件 编辑:程序博客网 时间:2024/04/29 04:44
  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.让我们一同努力,明天会更好!

0 0
原创粉丝点击