冒泡排序之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),稳定性强。

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