冒泡排序(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(),平均時間複雜度爲O()。
空間複雜度爲O(1),穩定性強。