- 冒泡排序
- 方法及优化
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;
}
};
扩展:
进一步优化算法:
三.总结
I.最常见的问题里面往往蕴涵很多小知识,小细节,许多积累II.让我们一同努力,明天会更好!