冒泡排序是通过一系列的“交换”来完成的
过程:
首先第一个元素与第二个元素比较,如果第一个元素比较大,两个交换。此时第一个元素就变成了第二个元素。
9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1-->8 , 9 , 7 , 6 , 5 , 4 , 3 , 2 , 1
然后第二个元素与第三个元素比较。。。
8 , 9 , 7 , 6 , 5 , 4 , 3 , 2 , 1-->8 , 7 , 9 , 6 , 5 , 4 , 3 , 2 , 1
以此类推,第一次排序的结果就为:8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 9
| 此时,并没有得到想要的 小——>大 的顺序排列 但是发现9是最大的数,已经放到了最后。那就可以在接下来的交换循环中不考虑它。 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 9 对前面的元素进行比较交换 得出:7 , 6 , 5 , 4 , 3 , 2 , 1 , 8 9 同理,下次比较交换也可以不考虑8 以此类推 就会得出1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 | 
如果说从第一个元素移动到最后的过程称为一趟,有n个元素
9移动一趟,8,7,6,5,4,3,2各移动一趟,最后剩1,无法比较。
则一共需要(n-1)趟。
9交换了8次,8交换了7次..........
需要交换剩余需要比较交换的元素个数-1.
程序:
#include<stdio.h>
void bubble_sort(int arr[], int sz)
{
  int i;
  for (i = 0; i < sz-1; i++)  //确定趟数
  {
    int j,temp=0;
    for (j = 0; j < sz - 1 - i; j++)//每次交换的次数
      if (arr[j]>arr[j+1])    // "<"是倒序排列,">"是正序排列
      {
         temp = arr[j];     //交换(一个元素与它下一个元素的交换)
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
  }
}
int main()
{
  int arr[] = { 9,8,7,6,5,4,3,2,1 };//确定一个原始序列
  int sz = sizeof(arr) / sizeof(arr[0]);//确定这个序列的元素个数 (9个)
  bubble_sort(arr, sz);
  return 0;
}









