- 简单但效率低
- 从左到右扫描数据,选择最大的数据,放在右边
- 要点:比较相邻的两个数,如果左边的数大于右边的数就进行交换
- 假设数组中有n个等待比较的元素,当第一趟排序结束之后,会将最大的元素移到序列的末尾;当第二趟排序结束之后,会将次大的元素移到序列的n-1个位置;当经过n-1次排序之后,就完成了冒泡排序~
C实现如下:需要2个循环
一趟:1跟2 ,2跟3, 3跟4,4跟5, 5跟6, 6跟7, 7跟8, 8跟9, 9跟10:后面比前面高换位,比前面底,不换位———将最大的换到最右边 总共比较9次
二趟:1跟2 ,2跟3, 3跟4,4跟5, 5跟6, 6跟7, 7跟8, 8跟9:后面比前面高换位,比前面底,不换位———将次大的换到n-1位 总共比较8次
所以~每完成一次外循环,内循环比较的次数减一
#include<stdlib.h> #include<stdio.h> void bubblesort(int *a, int n); int main() { int k; int a[10] = {2,4,6,8,0,1,3,5,7,9}; bubblesort(a, 10); for (k = 0; k < 10; k++) printf("%d\t", a[k]); system("pause"); return 0; } void bubblesort(int *a,int n) { int i, j, t; //10个彩条,进行9轮比较,外层循环控制的是比较的轮数 for (i = 0; i < n - 1; i++) { //每当外循环进行一次,内循环的比较久减少一次,所以j<n-i-1 for (j = 0; j < n - i - 1; j++) { if (a[j]>a[j + 1]) { t = a[j ]; a[j] = a[j + 1]; a[j + 1] = t; } } } }