• 冒泡排序算法,选择排序算法,插入排序算法


        这是最基本的三种排序算法,比它效率高的还有归并排序,堆排序,快速排序等算法,作为一个IT民工应该好好掌握。

        冒泡排序,选择排序和插入排序都有两层循环,时间复杂度均为O(n^2),下面逐一介绍:

        冒泡排序:

        1.外层循环,控制冒泡次数,起始从loop=1开始,结束标识是loop<length,循环length-1次(从数组的第二个数开始冒泡)。

        2.内层循环,选出对应轮的最大数,即第K轮冒泡选出的是第N-k-1大的数,故循环从loop=0开始,结束标志loop<N-k,循环N-k次。

        选择排序:

        1.外层循环,控制比较次数,第i轮设置min_index=i为最小值,结束标志loop<length-1.

        2.内存循环,循环找到本轮最小值的小标loop_min_index并判断是否交换,循环结束标志为loop<length.

      插入排序:

        1.外层循环,控制插入的元素。

        2.内层循环,控制插入的位置。

    下面是自己实现的三种种算法最简单的代码,没有做很多测试,有错还请指正:

    void BubbleSort(int *a, int length)
    {
        if(a==NULL || length < 2)
        {
            return;
        }
        for(int i=1; i<length; ++i)
        {
            for(int j=0; j<length-i; ++j)
            {
                if(a[j] > a[j+1])
                {
                    swap(a+j,a+j+1);
                }
            }
        }
    }
    void SelectionSort(int *a, int length)
    {
        if(a==NULL || length <2)
        {
            return;
        }
        for(int i=0; i<length-1; ++i)
        {
            int min_index = i;
            for(int j=i+1; j<length; ++j)
            {
                if(a[j] < a[min_index])
                {
                    min_index = j;
                }
            }
            if(min_index != i)
            {
                swap(a+min_index, a+i);
            }
        }
    }
    void InsertSort(int *a, int length)
    {
       if(a==NULL || length<2)
       {
        return;
    }
    for(int i=1; i<length; ++i) {
         int temp = a[i];
    int j = i - 1;
    for(; j>=0 && ptrA[j]>temp; --j) { swap(a+j, a+j+1); }
    a[j+1] = temp; } }
  • 相关阅读:
    倒计时2(小于0时的格式)
    日期 Date()
    倒计时5(超过时间为0:0:0)
    倒计时4
    倒计时3
    Lucene_solr
    Solr与tomcat搭建(搭建好)
    SSM(Spring-SpringMvc-Mybatis)练习
    SpringMvc
    Mybatis(使用)与Spring整合
  • 原文地址:https://www.cnblogs.com/bestwangjie/p/5622236.html
Copyright © 2020-2023  润新知