交换排序
基本思想:两两比较待排序记录的键,发现两个记录的次序相反时即进行交换,直至没有反序的记录为止。
冒泡排序一次扫描后,“最轻”的气泡就漂浮到该区域的顶部,紧接着,“次轻”的气泡有漂浮上来。为了改进性能,引入一个是否交换的标志exchange,当某排序未发生交换是,提前结束排序算法。
表2-1 冒泡排序的时间复杂度
初始状态 | 正序 | 反序 | 无序(平均) |
第i趟的键比较次数 | n-1 | n-i |
|
总的键比较次数 | n-1 | n(n-1)/2 |
|
第i趟的记录移动次数 | 0 | 3*(n-i) |
|
总的记录移动次数 | 0 | 3*n(n-1)/2 |
|
时间复杂度 | O(n) | O(n^2) | O(n^2) |
表2-1 冒泡排序的空间复杂度
冒泡排序是一个就地排序,是一种稳定的排序。 |
// bubblesort.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
void bubble_sort(int array[],int n)
{
int i,j,flag,temp;
for(i = 1; i < n; i++)
{
flag = 0;
for(j = n-1; j >=i; j--)
{
if(array[j-1] > array[j])
{
temp= array[j-1];
array[j-1] = array[j];
array[j] = temp;
flag = 1;
}
}
if(0 == flag)
{
break; //跳出循环
}
}
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[]={46,58,15,45,90,18,10,62};
bubble_sort(a,8);
return 0;
}