一. 算法描述
init
0 1 2 3 4<span style="white-space:pre"> </span>5<span style="white-space:pre"> </span>6 7<span style="white-space:pre"> </span>8<span style="white-space:pre"> </span>9
--------------------------------------------------------------------------
3 55 1 232 11 6 9 8 1 10
3 1 55 232 11 6 9 8 1 10
3 1 55 11 232 6 9 8 1 10
3 1 55 11 6 232 9 8 1 10
3 1 55 11 6 9 232 8 1 10
3 1 55 11 6 9 8 232 1 10
3 1 55 11 6 9 8 1 232 10
3 1 55 11 6 9 8 1 10 232
1 3 55 11 6 9 8 1 10 232
1 3 11 55 6 9 8 1 10 232
1 3 11 6 55 9 8 1 10 232
1 3 11 6 9 55 8 1 10 232
1 3 11 6 9 8 55 1 10 232
1 3 11 6 9 8 1 55 10 232
1 3 11 6 9 8 1 10 55 232
1 3 6 11 9 8 1 10 55 232
1 3 6 9 11 8 1 10 55 232
1 3 6 9 8 11 1 10 55 232
1 3 6 9 8 1 11 10 55 232
1 3 6 9 8 1 10 11 55 232
1 3 6 8 9 1 10 11 55 232
1 3 6 8 1 9 10 11 55 232
1 3 6 1 8 9 10 11 55 232
1 3 1 6 8 9 10 11 55 232
1 1 3 6 8 9 10 11 55 232
done
1 1 3 6 8 9 10 11 55 232
二. 算法分析
平均時間複雜度:O(n2)
空間複雜度:O(1) (用於交換)
穩定性:穩定
三. 算法實現
#include <stdlib.h>
#include <stdio.h>
#include "print.c"
//交換data1和data2所指向的整形
void DataSwap(int* data1, int* data2)
{
int temp = *data1;
*data1 = *data2;
*data2 = temp;
}
/********************************************************
* *函數名稱:BubbleSort
* *參數說明:pDataArray 無序數組;
* * iDataNum爲無序數據個數
* *說明: 冒泡排序
* *********************************************************/
void BubbleSort(int* pDataArray, int iDataNum)
{
int i = 0, j = 0;
for (i = 0; i < iDataNum - 1; i++) //走iDataNum-1趟
{
for (j = 0; j < iDataNum - i - 1; j++)
{
if (pDataArray[j] > pDataArray[j + 1])
{
DataSwap(&pDataArray[j], &pDataArray[j + 1]);
print(pDataArray, iDataNum);
}
}
}
}
int main()
{
int iDataNum = 10;
int pDatas[10] = {3,55,1,232,11,6,9,8,1,10};
printf("init\n");
print(pDatas, iDataNum);
BubbleSort(pDatas, iDataNum);
printf("\ndone\n");
print(pDatas, iDataNum);
}
參考文章:http://blog.csdn.net/cjf_iceking/article/details/7911027