冒泡排序法

来源:互联网 发布:同步带设计软件下载 编辑:程序博客网 时间:2024/06/05 16:20

一、冒泡法

 1、基本思想:用关键字从剩余所有元素第一个开始依次进行比较,每一趟找出序列最大的元素沉在最后,重复操作。若遇到逆序进行位置交换,接着用较大值进行后面的比较过程。

 2、举例: 将arr[5]={5,2,9,6,4,1}用冒泡法进行排序

   (1)第一趟:用arr[0]=5和其余元素依次进行比较。

      5 > 2,二者位置交换; arr[5]={2,5,9,6,4,1}

      5 < 9,位置不变,然后用9去和后边的元素进行比较;arr[5]={2,5,9,6,4,1}

      9 > 6,二者位置交换;arr[5]={2,5,6,9,4,1}

      9 >4,二者位置交换;arr[5]={2,5,6,4,9,1}

      9 > 1,二者位置交换;arr[5]={2,5,6,4,1,9}

   (2)第二趟:用arr[1]=5和其余所有元素进行比较。

     5 > 2,位置不变,arr[5]={2,5,6,4,1,9}

      5 < 6,位置不变,然后用6去和后边的元素进行比较arr[5]={2,5,6,4,1,9}

      6 > 4,二者位置交换;arr[5]={2,5,4,6,1,9}

      6 > 1,二者位置交换,arr[5]={2,5,4,1,6,9}

   (3)第三趟:用arr[2]=4和其余元素进行比较。

      4 > 2,位置不变,arr[5]={2,5,4,1,6,9}

      4 < 5,二者位置交换,然后用5和后边的元素进行比较;arr[5]={2,4,5,1,6,9}

      5 > 1,二者位置交换,arr[5]={2,4,1,5,6,9}

   (4)第四趟:用arr[3]=1和其余元素进行比较。

      1 < 2,二者位置交换,然后用2和后边的元素进行比较;arr[5]={1,4,2,5,6,9}

      2 < 4,位置不变,然后用4和后边剩余元素进行比较;arr[5]={1,2,4,5,6,9}

      4 < 5,位置不变,arr[5]={1,2,4,5,6,9}

      所以排序结果为:arr[5]={1,2,4,5,6,9}

 3、稳定性:冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,不用交换;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,也不会交换,相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

 4、时间复杂度:最坏时间复杂度为O(n^2)

5、代码如下:

#include<stdio.h>void BubbleSort(int arr[], int len){int tmp;bool mark = false;for (int i = 0; i < len-1; i++){mark = false;for (int j = 0; j < len - 1 - i; ++j){if (arr[j]>arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];2arr[j + 1] = tmp;mark = true;}}//printf("i = %d\n", i);if (!mark){break;}}}int main(){    int arr[] = {263,29,6,3287,232,8,23,89,63,23,7,9};int len = sizeof(arr) / sizeof(arr[0]);    BubbleSort(arr, len);for(int i=0;i<len;i++){  printf("%5d",arr[i]);}return 0;}


 


              

      

原创粉丝点击