排序算法一——冒泡排序

来源:互联网 发布:涌泉知恩 编辑:程序博客网 时间:2024/05/21 19:41

排序算法一:冒泡排序

最简单,最常用的排序方法之一。冒泡排序是稳定的,相同的值的相对位置在排序后没有改变。时间复杂度O(n^2)。
冒泡排序的代码及其改进版:

/*****************************************************     File name:1bubble.c Author: Tang Zhiqian  Date:2017-08-07 17:07*****************************************************/#include <stdio.h>#define MAX 10typedef int ElemenType;typedef ElemenType ARR[MAX];    //给数组另起名字int len = sizeof(ARR)/sizeof(ElemenType);    //数组长度void swap(ElemenType arr[],int i,int j);    //交换函数void print(ARR arr);    //打印void bubble1(ARR arr);    //未改进的冒泡排序void bubble2(ARR arr);    //改进后的冒泡排序int main(){    ARR arr1 = {9,0,1,2,3,4,5,6,7,8};    ARR arr2 = {9,0,1,2,3,4,5,6,7,8};    printf("\n未改进的冒泡排序:\n");    bubble1(arr1);    printf("\n");    printf("改进后的冒泡排序:\n");    bubble2(arr2);    return 0;}void bubble1(ARR arr){    int i,j;    for (i = 0; i < len - 1; i++)    {        for (j = 0; j < len - i - 1; j++)        {            if (arr[j] > arr[j + 1])            {                swap(arr,j,j+1);            }        }        print(arr);    }}void bubble2(ARR arr){    int i,j;    int flag = 1;    for (i = 0; i < len - 1; i++)    {        flag = 0;        for (j = 0; j < len - i - 1; j++)        {            if (arr[j] > arr[j + 1])                {                flag = 1;     //进入这个判断,flag = 1;                swap(arr,j,j+1);            }        }         if (flag == 0)    //如果flag等于零,说明上一次循环没有交换位置,说明排序已经完成,则break        {            break;        }        print(arr);    }}void  print(ARR arr){    int i;    for (i = 0; i < len; i++)    {        printf("%d ",arr[i]);    }    printf("\n");}void swap(ElemenType arr[],int i,int j){    ElemenType temp;    temp = arr[i];    arr[i] = arr[j];    arr[j] = temp;}

程序运行结果:
这里写图片描述

在这里我们看到,未改进的bubble1排序,输出了9行排好序的数,而改进过的bubble2只输出了一行。未排序前的数字顺序为{9,0,1,2,3,4,5,6,7,8},观察发现,其实经过一轮冒泡之后,这个数组就已经排好序了,但是程序不知道是否排好序,所以会一直循环完。 但是在bubble2中我添加了一个flag,进入第一个for循环就让flag=0,第二级for循环中if判断下flag= 1,假设二级for循环一圈后都没有进入到if里面,则flag = 0,说明这时候数组已经排好序了,因为它一轮比较之后都没有进入if里面执行swap函数。这样下来电脑就少执行了很多次 比较 的过程。

原创粉丝点击