- 将整个数组a分为有序的部分和无序的两个部分。前者在右,后者在左边。
- 开始,整个数组都是无序的。有序的部分没有元素。
- 每次要使得无序部分最大的元素移动到有序部分第一个元素的左边。移动的方法是:依次比较相邻的两个元素,如果前面的比后面的大,就交换他们的位置。这样,大的元素就像水里气泡一样不断往上浮。移动结束有序部分增加了一个元素。
- 直到无序的部分没有元素
void BubbleSort(int a[] ,int size)
{
for(int i = size-1;i > 0; --i ) {
//每次要将未排序部分的最大值移动到下标i的位置
for(int j = 0; j < i; ++j) //依次比较相邻的两个元素
if( a[j] > a[j+1]) {
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
简单排序的效率
- 上面3种简单排序算法,都要做 n ^ 2量级次数的比较(n是元素个数)!
- 好的排序算法,如快速排序,归并排序等,只需要做n*log2n量级次数的比较!