iOS--排序算法集合

---------------------直接插入排序--------------------

思想:将数组分成两部分,两部分默认是有序的,然后从第二部分开始循环遍历,逐一与第一部分比较,比较是从第一部分的最后开始,如果比第一部分的大,就交换顺序。

   //创建数组

    int array[] = {1,6,4,9,6,12,3};

    int i,j,temp;

    //数组第一个元素默认排好序,从第二元素开始遍历数组

    for (i = 1; i < 7; i ++) {

        //获得第二部分的第一个元素

        temp = array[i];

        j = i - 1;

        //与第一部分已经排好序的数组逐一比较,大于temp时,该元素后移

        while (j >= 0 && array[j] > temp) {

  //将大的元素插入到后面

            array[j + 1] = array[j];

            j --;

        }

            array[j + 1] = temp;

    }

    for (int i = 0; i < 7; i ++) {

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

    }

 ---------------------希尔排序算法--------------------

思想:先获取步长,根据步长获得每次的每个小部分,然后将每一个小部分进行直接插入排序。

    //创建数组

    int array[] = {7,4,8,3,5,9,7};

    int i,j,gap;

    //获取步长,即对增量进行选取

    for (gap = 7/2; gap > 0; gap = gap / 2) {

        //循环每一次增量,获取每个部分

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

            //直接插入排序

            for (j = i + gap; j < 7; j += gap) {

                int temp = array[j];

                int k = j - gap;

                while (k >= 0 && array[k] > temp) {

                    array[k + gap] = array[k];

                    k -= gap;

                }

                array[k + gap] = temp;

            }

        }

    }

    for (int i = 0; i < 7; i ++) {

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

    }

 ---------------------直接选择排序算法-------------------- 

int array[] = {7,4,8,3,5,9,7};

   int i,j,min,temp;

    //进行n-1次循环就可以,剩下的那个肯定是最大的

    for (i = 0; i < 7 - 1; i ++) {

        //假设第一个是最小的

        min = i;

        //找到最小的

        for (j = i + 1; j < 7; j ++) {

            if (array[min] > array[j]) {

                min = j;

            }

        }

        //如果第一个不是最小的

        if (min != i) {

            temp = array[min];

            array[min] = array[i];

            array[i] = temp;

        }

    }

     ---------------------冒泡排序算法--------------------

int array[] = {7,4,8,3,5,9,7};

    for (int i = 0; i < 7; i ++) {

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

    }

    for (int i = 0; i < 7 - 1; i ++) {

        for (int j = 0; j < 7-1-i; j ++) {

            if (array[j] > array[j + 1]) {

                int temp = array[j];

                array[j] = array[j + 1];

                array[j + 1] = temp;

            }

        }

    }

    for (int i = 0; i < 7; i ++) {

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

    }

     ---------------------快速排序算法--------------------

void quickSort(int array[], int numSize)

{

    int i = 0;

    int j = numSize - 1;

    //指定参照的为第一个元素

    int val = array[0];

    //当数组元素个数大于2的时候才有必要排序

    if (numSize > 1) {

        //判断终止的条件:当i< j 的时候

        while (i < j) {

            //从后向前

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

                if (array[j] < val) {

                    array[i ++] = array[j];

                    break;

                }

            }

            //从前向后

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

                if (array[i] > val) {

                    array[j --] = array[i];

                    break;

                }

            }

            //将第一个加入到数组里

            array[i] = val;

            //递归,对前i个排序

            quickSort(array, i);

            quickSort(array + i  + 1, numSize - i - 1);

        }

     }

}

原文地址:https://www.cnblogs.com/zhangshan/p/4166291.html