一、冒泡排序算法基本思想
冒泡排序是选择排序的一种。每一趟遍历数组,确定一个最大(如果升序排序)元素通过冒泡的形式把它至于数组的未排好序的末尾处。
二、冒泡排序的数据结构
一个数组分成两部分,前头的是未好序的,后边是排好序的。
三、排序过程图解
四、算法源代码
1.普通冒泡排序
#include<cstdio> int array[] = {3,6,4,2,11,10,5}; //待排序的数组 int len = 7; //数组的长度 int main() { //将待排序数组升序排序 for(int i=len-1;i>=0;i--) { for(int j=0;j<i;j++) { if(array[j]>array[j+1]) { int temp = array[j+1]; array[j+1] = array[j]; array[j] = temp; } } } //打印出排好序的数组 for(int i=0;i<len;i++) printf("%d ",array[i]); return 0; }
2.优化后的冒泡排序
#include<cstdio> int array[] = {3,6,4,2,11,10,5}; //待排序的数组 int len = 7; //数组的长度 bool flag; //是否有元素交换的标记 int main() { //将待排序数组升序排序 for(int i=len-1;i>=0;i--) { flag = false; for(int j=0;j<i;j++) { if(array[j]>array[j+1]) { int temp = array[j+1]; array[j+1] = array[j]; array[j] = temp; flag = true; //交换元素的时候设置标记为true } } //如果除了第一趟,发现没有元素交换过 //那么说明序列已经排好 if(!flag && i!=len-1) break; } //打印出排好序的数组 for(int i=0;i<len;i++) printf("%d ",array[i]); return 0; }