排序算法--冒泡排序

先貼上我的源代碼

#include
void fun(int m[],int n);
static int m=-1;
int main(int argc,char **argv)
{
	int data[10]={2,3,4,8,7,6,5,9,21,10,};
	fun(data,10);
	return 0;
}
void fun(int data[],int n)
{
	int i=0;
	int j;
	int tmp;
	int k;
	printf("要排序的數據:");
	for(;ii;j--)
		{
			if(data[j]

運行結果:


冒泡排序的原理

比較相鄰兩個元素的大小,如果第一個比第二個大則交換兩個的位置。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。

針對所有的元素重複以上的步驟,除了最後一個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

我的代碼中跟描述的不一樣我是通過數組的最後兩個元素開始比較將最小的數據首先放到數組頭部。

這段代碼中有幾個地方需要注意:

第一個設置了一個靜態變量m。這個變量是爲了標記一趟排序是否發生了交換,如果一趟下來沒有發生數據交換則說明已經是最終的有序數組了。從而避免沒必要的持續遍歷。如果一數組中的數據是有序的比如1 2 3 4 5則一次遍歷局可以完成數組的排序,當然也可以看出如果是逆序排列則比如45 4 3 2 1則需要的時間複雜度是最高的。

第二個註釋的數據交換。我們可以申請一個整型用於存放中間變量,但是在交換兩個數的時候是可以不用第三個整型變量的,該交換兩個數的方式來源於算法:a=a+b;b=a-b;a=a-b;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章