冒泡排序和简单选择排序

#define LENGTH 10

 /*冒泡排序算法的运作如下:

     比较相邻的元素。如果第一个比第二个大,就交换他们两个。

     对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

     针对所有的元素重复以上的步骤,除了最后一个。

     持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。*/

    int i, j, tmp, number[LENGTH] = {95, 45, 15, 78, 84, 51, 24, 12};

    for (i = 0; i < LENGTH; i++) {

        for (j = LENGTH - 1; j > i; j--) {

            if (number[j] < number[j-1]) {//相邻两个数比较,由小到大排序

                //if (number[j] > number[j-1])  //相邻两个数比较,由大到小排序

                tmp = number[j-1];

                number[j-1] =  number[j];

                number[j] = tmp;

            }

        }

    }

    

    for (i = 0; i < LENGTH; i++) {

        printf("%d ", number[i]);

    }

    printf(" ");

    /*执行次数为:

     (n-1)+(n-2)+(n-3)+……+3+2+1 = (n-1)*n/2 = (n^2 - n)/2

     即时间复杂度为: O(n^2)

*/

/*选择排序基本思想:

        1、将所有数种最小的数与a[0]交换

        2、将a[1]a[n - 1]中最小的数与a[1]交换

        3....

        没比较一趟找出一个未经排序的数中最小的数,共比较n - 1

     时间复杂度:

     每趟先从s[i]+1~s[n-1]找出最大元素或者最小元素,与s[i]进行比较、交换;

     总的比较次数为: n(n-1)/2,即时间复杂度为: O(n^2)

*/

    int num[LENGTH] = {12,182,17,78,23,69,90,47,45,32};

    int i,j,k,t;

    for (i = 0; i < LENGTH - 1; i++) {//进行LENGTH - 1趟的比较

        k = i;

        for (j = i + 1; j < LENGTH; j++) {//找出没有排序中最小的数

            if (num[j] < num[k]) {//从小到大

              //if (num[j] > num[k]) 从大到小

                k = j;

            }

        }

        //将没有排序的最小的数放到最前面

        t = num[k];

        num[k] = num[i];

        num[i] = t;

    }

原文地址:https://www.cnblogs.com/chenhaosuibi/p/3439303.html