冒泡排序之Python實現和C++實現

冒泡排序(Bubble sort) 

1.排序思想:

冒泡排序的基本思想就是:從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的數據元素交換到了無序隊列的隊尾,從而成爲有序序列的一部分;下一次繼續這個過程,直到所有數據元素都排好序。

算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裏最大(小)的數據元素放到隊尾。

另外我們可以設置狀態標誌,來減少交換的次序。


2.算法實現

Python實現

##Bubble sort
##python3
##Yanglin Tu
def bubble_sort(unsort_list):
	length = len(unsort_list)	
	for i in range(length-1):
		flag = True 
		for j in range(length-i-1):
			if unsort_list[j] > unsort_list[j+1]:
				flag = False
				unsort_list[j], unsort_list[j+1] = unsort_list[j+1], unsort_list[j]
		if flag:
			break
	return unsort_list

def main():
	list_a = [20, 5, 7, 1, 66, 47, 5, 18]
	print(list_a)
	sorted_list = bubble_sort(list_a)
	print(sorted_list)

if __name__ == '__main__':
	main()

C++實現

//Bubble sort
//c++
//Yanglin Tu
#include <iostream>
using namespace std;
void bubble_sort(int *arr,int length);
int main()
{
	int i;
	int arr_list[] = {20, 5, 7, 1, 66, 47, 5, 18};
	int length = sizeof(arr_list)/sizeof(int);
	for(i=0; i<length-1; i++)
		cout<<arr_list[i]<<'\t';
	cout<<endl;
	bubble_sort(arr_list,length);
	for(i=0; i<length-1; i++)
		cout<<arr_list[i]<<'\t';
	cout<<endl;
	return 0;
}
void bubble_sort(int *arr,int length)
{	
	int i,j;
	for(i=0; i<length-1; i++){
		int flag = 1;
		for(j=0; j<length-i-1; j++){
			if(arr[j] > arr[j+1]){
				flag = 0;
				int temp = arr[j+1];
				arr[j+1] = arr[j];
				arr[j] = temp;
			}
		}
		if(flag)
			break;
	}
}

3.性能分析

冒泡排序的時間複雜度,在最好的情況下爲O(n),最壞的情況下爲O(n^2),平均時間複雜度爲O(n^2)。

空間複雜度爲O(1),穩定性強。

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