常用算法-冒泡排序代码实现

来源:互联网 发布:cs编程语言 编辑:程序博客网 时间:2024/05/29 17:40

冒泡排序的基本原理就是:两两比较,较小的放到前面,较大的放到后面.

/* 冒泡法 */#include <stdio.h>//函数声明void sortArray(int array[],int length);int main(int argc, const char * argv[]) {    // insert code here...    //定义数组    int array[] = {16,98,56,34,66,77};    //调用排序函数    sortArray(array, sizeof(array) / sizeof(int));    //打印排序后的数组    for (int i =0 ; i < sizeof(array) / sizeof(int); i++) {        printf("%d ",array[i]);    }    printf("\n");    return 0;}//冒泡法(起泡法)实现void sortArray(int array[],int length){    //for循环    for (int i = 0; i < length - 1; i++) {        for ( int j = 0; j < length - i -1; j++) {            if (array[j] < array[j+1] ) {                array[j] = array[j] + array[j+1];                array[j+1] = array[j] - array[j+1];                array[j] = array[j] - array[j+1];            }        }    }}

从上面的代码可以看出,外层循环 i,控制的是比较的趟数,内存循环 j 控制的是每趟比较的次数.

第一趟比较完,最大的数放到了最后,
第二趟比较的时候,找出次大的数,放在最大数前面一位,但是不会再讲最后的最大数纳入比较范围.
.
.
.
直到全部完成排序

当然冒泡排序还有其他写法:如

#include <stdio.h>  void swap(int *a, int *b);  int main()  {      int    array[10] = {15, 225, 34, 42, 52, 6, 7856, 865, 954, 10};      int    i, j;      for (i = 0; i < 10; i++)      {          //每一次由底至上地上升          for (j = 9; j > i; j--)          {              if (array[j] < array[j-1])              {                      swap(&array[j], &array[j-1]);              }          }      }      for (i = 0; i < 10; i++)      {          printf("%d\n", array[i]);      }      return    0;  }  void swap(int *a, int *b)  {      int    temp;      temp = *a;        *a = *b;        *b = temp;  }  

这种写法,是第一次将最小的数放到最前面,第二次找出剩余数中最小的数,放到第二位 … 直到全部排序完毕

0 0