• 数据--第27课


    第27课 - 初始斗转

    1. 选择排序

    每一次选出前面的元素最小的元素作为第i个元素。

    程序:

    #include <stdio.h>

    void println(int array[], int len)

    {

        int i = 0;

       

        for(i=0; i<len; i++)

        {

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

        }

       

        printf(" ");

    }

    void swap(int array[], int i, int j)

    {

        int temp = array[i];

       

        array[i] = array[j];

       

        array[j] = temp;

    }

    void SelectionSort(int array[], int len) // O(n*n)

    {

        int i = 0;

        int j = 0;

        int k = -1;

       

        for(i=0; i<len; i++)

        {

            k = i;

           

            for(j=i; j<len; j++)

            {

                if( array[j] < array[k] )

                {

                    k = j;

                }

            }

           

            swap(array, i, k);

        }

    }

    int main()

    {

        int array[] = {21, 25, 49, 25, 16, 8};

        int len = sizeof(array) / sizeof(*array);

       

        println(array, len);

       

        SelectionSort(array, len);

       

        println(array, len);

       

        return 0;

    }

    2. 插入排序

    当插入第i个元素的时候,前面的元素都已经排列好了。我们用V[i]的关键字与前面的关键字进行比较,找到插入位置,将V[i]插入即可。原来位置上的对象向后顺移。

    程序:

    #include <stdio.h>

    void println(int array[], int len)

    {

        int i = 0;

       

        for(i=0; i<len; i++)

        {

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

        }

       

        printf(" ");

    }

    void swap(int array[], int i, int j)

    {

        int temp = array[i];

       

        array[i] = array[j];

       

        array[j] = temp;

    }

    void InertionSort(int array[], int len) // O(n*n)

    {

        int i = 0;

        int j = 0;

        int k = -1;

        int temp = -1;

       

        for(i=1; i<len; i++)

        {

            k = i;

            temp = array[k];

           

            for(j=i-1; (j>=0) && (array[j]>temp); j--)

            {

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

                k = j;

            }

           

            array[k] = temp;

        }

    }

    int main()

    {

        int array[] = {21, 25, 49, 25, 16, 8};

        int len = sizeof(array) / sizeof(*array);

       

        println(array, len);

       

        InertionSort(array, len);

       

        println(array, len);

       

        return 0;

    }

    3. 冒泡排序

    设代排序的数据元素有n个,最多作n-1趟。走一趟选一个。

    程序:

    #include <stdio.h>

    void println(int array[], int len)

    {

        int i = 0;

       

        for(i=0; i<len; i++)

        {

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

        }

       

        printf(" ");

    }

    void swap(int array[], int i, int j)

    {

        int temp = array[i];

       

        array[i] = array[j];

       

        array[j] = temp;

    }

    void BubbleSort(int array[], int len) // O(n*n)

    {

        int i = 0;

        int j = 0;

        int exchange = 1;

       

        for(i=0; (i<len) && exchange; i++)

        {

            exchange = 0;

           

            for(j=len-1; j>i; j--)

            {

                if( array[j] < array[j-1] )

                {

                    swap(array, j, j-1);

                   

                    exchange = 1;

                }

            }

        }

    }

    int main()

    {

        int array[] = {21, 25, 49, 25, 16, 8};

        int len = sizeof(array) / sizeof(*array);

       

        println(array, len);

       

        BubbleSort(array, len);

       

        println(array, len);

       

        return 0;

    }

    小结:

    选择排序,插入排序以及冒泡排序的算法思想简单,而且算法的时间复杂程度都是O(n2)。

    这三种排序的算法都是稳定的。

  • 相关阅读:
    SQL Server 锁升级(Lock Escalations)
    Linux 输入与输出重定向详解
    MySQL DDL的成本高低
    spring 学习-bean创建-refresh方法
    spring 学习-bean创建-scan扫描bean
    spring 学习-bean创建-重要类介绍
    zkclient大量节点事件导致CPU飙升
    spring 学习-bean创建-重要类介绍
    ElasticSearch 按值排序
    Redis set 详解
  • 原文地址:https://www.cnblogs.com/free-1122/p/11336010.html
Copyright © 2020-2023  润新知