冒泡排序算法
1、 冒泡排序基本思想
交换相邻两个数,如果不满足排序条件,那么就交换。每一次遍历数组后,那么最后一个元素必然是最大(小)的元素。如:{4,3,5,1},按照从大到小排序。
排序范围【0~3】,橙色为需要交换的元素,红色为当前排序范围的最大元素。
voidBubbleSort1(int *data, int left, int right)C++代码:
#include <iostream>
namespace mySort
{
//冒泡排序1
{
intn = (right - left + 1);
for(int i = 0; i < n; ++i)
for(int j = 1; j <= right-i; ++j)
if(data[j - 1] > data[j])
std::swap(data[j- 1], data[j]);
}
//改进1
voidBubbleSort2(int * data, int left, int right)
{
boolflag = true;
intn = right - left + 1;
intk = n;
while(flag)
{
flag= false;
for(int i = 1; i < k; ++i)
{
if(data[i - 1] > data[i])
{
std::swap(data[i- 1], data[i]);
flag= true;
}
}
--k;
}
}
//改进2
voidBubbleSort3(int * data, int left, int right)
{
boolflag = true;
intn = right - left + 1;
intk = n;
while(flag)
{
flag= false;
inttmp = 0;
for(int i = 1; i < k; ++i)
{
if(data[i - 1] > data[i])
{
std::swap(data[i- 1], data[i]);
flag= true;
tmp= i;
}
}
k= tmp;
}
}
};
int main()
{
inta[] = {1};
//mySort::BubbleSort1(a,0, 1);
//mySort::BubbleSort2(a,0, 5);
mySort::BubbleSort3(a,0, 0);
return0;
}
后面是两种改进算法,请读者慢慢体会。
时间复杂度
算法1:任何情况都是O(N*N)
改进的算法2和3:最好O(N),普通和最坏O(N*N)

浙公网安备 33010602011771号