zoukankan      html  css  js  c++  java
  • 今天来谈谈三大基础排序选择排序、冒泡排序、插入排序

    一、选择排序

      1)图解

        

                                                将上面的的这个图用选择排序,那么将是如下的方式来进行排序,看下图

      

    上图用第一个元素依次和后面所有数进行比较,交换后的结果为

    以此类推,用第二个数、第三个数、第四个数与后面的数进行比较

                                                       

    好了,到这里想必大家都明白了大概是怎么实现的了,现在我们就进入代码区来进行实现

     

       2)代码(C语言)

        

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc,char *argv[]){
        int arr[] = {1,5,3,2,4};
        int temp;
        int len = sizeof(arr)/sizeof(int);
        for (int i = 0; i < len; i++)
        {
            for (int j = i + 1; j < len; j++)
            {
                if(arr[i]<arr[j]){
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
            
        }
        for (int i = 0; i < len; i++)
        {
            printf("%d",arr[i]);    //输出结果就是5 4 3 2 1
        }
    }

    这里我就不做过多解释了,代码实现相对比较的简单

    二、冒泡排序

      1)图解

        还是拿上面的那个图来讲解


                                                                                     第一轮我们先画出来,选择最小的元素排在最后,以此两个数进行比较

       第二轮后面的依次类推,方式是一样的。

        第二轮结果   第三轮结果因为数字的特殊性,现在已经排好序,但是后面那一轮比较还是会进行的。

        上面就是我们第一轮要进行排序的结果,总的次数是(n-1),我么把次数当成m,那么每轮的次数就是(n - m),意思就是我们排一个数后,每次轮训的次数就要减少,比如说上面它的次数就是4(第一轮)->3(第二轮)->2(第三轮)->1(第四轮)

      2)代码

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc,char *argv[]){
        int arr[] = {1,5,3,2,4};
        int temp;
        int len = sizeof(arr)/sizeof(int);
        for (int i = 0; i < len; i++)
        {
            for (int j = 0; j < len - i; j++)   //代码主要是这里的不同
            {
                if(arr[j]<arr[j+1]){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            
        }
        for (int i = 0; i < len; i++)
        {
            printf("%d",arr[i]);    //输出结果就是5 4 3 2 1
        }
    }

    代码还是相对的比较简单,也不做过的解释了哈,图解已经把这个原理说的比较的清楚了。

    三、插入排序

      1)图解

        上原图

     它的原理:就是拿一个数出来和前面的进行比较,如果刚好是小于前面的这个数,那么就插入到这个数的前面去

    为方便理解,我们就从小到大进行排序,接下来看图

      

     好了以上就是我们的插入排序,是不是也并不复杂,那么接下来就是写代码的时候

      2)代码

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc,char *argv[]){
        int arr[] = {1,5,3,2,4};
        int temp;
        int len = sizeof(arr)/sizeof(int);
        for (int i = 0; i < len; i++)
        {
            temp = arr[i];
            int j;
            for (j = i; j > 0; j--)
            {
                if(temp < arr[j-1]){   //比较这个数小于前面的数就将前面这个数后移一位        否则就结束循环
                    arr[j] = arr[j-1];
                }
                else break;
            }
            arr[j] = temp;
            
        }
        for (int i = 0; i < len; i++)
        {
            printf("%d",arr[i]);    //输出结果就是5 4 3 2 1
        }
    }

     

    四、小总结

      我们不难看出这些排序都是我们基本需要掌握的知识,那么至于性能的话可能不是特别的好,如果需要性能更加的优化,就需要学习其它的算法。这里排版可能不是太好,还请见谅。

  • 相关阅读:
    Kaggle网站流量预测任务第一名解决方案:从模型到代码详解时序预测
    点击率预估
    论文列表——text classification
    retrofit+RXjava二次封装
    Twitter Lite以及大规模的高性能React渐进式网络应用
    《设计模式》结构型模式
    maven多module项目中千万不要引入其它模块的单元測试代码
    Jenkins配置基于角色的项目权限管理
    读《百度基础架构技术发展之路》有感
    <html>
  • 原文地址:https://www.cnblogs.com/dy105525/p/12904654.html
Copyright © 2011-2022 走看看