冒泡排序

冒泡排序算法的原理:

1、比較相鄰的元素,如果第一個比第二個大,就交換它們兩個。

2、對每一組相鄰元素做同樣的操作,一趟完成後,最後的元素就是最大的數。

3、對所有元素重複上述步驟,除了最後一個數

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

算法代碼如下:

void  BubbleSort(int a[], int n)
{
	int temp;
	for (int i = 0 ; i < n - 1; ++i)
	{
		for (int j = 0; j < n - 1 - i; ++j)
		{
			if (a[j] > a[j+1])
			{
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
}

加入我們的待排序記錄是{2,1,3,4,5,6,7,8,9}在第一趟交換了1和2之後,序列已經有序,因此後面的比較趟數都不需要了,但是算法仍然會執行剩下無用的操作  ,因此我們可以在原有算法基礎上做一些優化,優化後的代碼如下:

void  BubbleSort(int a[], int n)
{
	int temp;
	Status flag = TRUE;
	for (int i = 0 ; i < n - 1 && flag == TRUE; ++i)
	{
		flag = FALSE;
		for (int j = 0; j < n - 1 - i; ++j)
		{
			if (a[j] > a[j+1])
			{
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
				flag = TRUE;
			}
		}
	}
}

通過加入一個標識變量,如果發現一趟下來沒有可交換的元素,則表示序列已排好序。

時間複雜度:

如果待比較記錄集合一開始就是有序的,那只需要比較n-1次,時間複雜度爲O(n), 如果待排序記錄集合一開始是逆序的,此時需要比較1+2+3+...(n-1) = n(n-1)/2次,並作等量級的記錄移動,因此時間複雜度爲O(n^2)。

穩定性:

冒泡排序是通過兩兩比較把小的元素往後排,大的元素往後排,所以,如果兩個元素相等,是不會交換的,所以冒泡排序是一種穩定的排序算法。

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