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