冒泡法,就是从头到尾依次比较。
以从小到大为例:当i = 0的时候,将后面的依次与之比较,使得0位的数,总是较小的那一个。比较完了之后,从i=1开始,接着比较;以此类推。
最终,得到从小到大的数据。最差的情况是,每次比较都要换位置,操作次数为(n-1)+(n-2)+...+1=n(n-1)/2; 最好的情况是,不用交换。这里,在计算过程中加个标识计数器iCount,标识本次是否发现逆序,可改进冒泡法。
算法:改进冒泡排序法
输入:程序内部输入一个数组
输出:将数组内的数字按从小到大排序
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
void bubble_sort(int *a, int left, int right);
void exch(int &e1, int &e2);
int main()
{
int tmp, iCount = 0;
int a[8] = {1,2,3,4,5,6,7,8}, i, j;
bubble_sort(a, 0, 8);
for(i = 0; i < 8; i++){
cout << a[i] << " ";
}
system("pause");
return 0;
}
// bubble sort
void bubble_sort(int *a, int left, int right)
{
int i, j, iCount;
for(i = left; i < right; i++){
iCount = 0;
for(j = i + 1; j < right; j++){
if(a[i] > a[j]){
exch(a[i], a[j]);
}
iCount++;
}
if(iCount ==0){
break;
}
}
}
// change two integers
void exch(int &e1, int &e2)
{
int tmp;
tmp = e1;
e1 = e2;
e2 = tmp;
}