• 数据结构和算法 – 1.基础排序算法


    冒泡

    选择

    插入

    数组的大小会使算法的性能产生很大的差异。选择排序比冒泡排序快了 100 多倍,而且选择排序比插入排序快了 200 多倍。
    当数组元素量增加到 10000 个的时候,确实能看出数组大小对三种排序算法的影响。

    优先级:选择排序 > 冒泡排序 > 插入排序

    image

    1.冒泡排序

    public static int[] MaoPao(int[] arr)
            {
                //执行多少次
                for (int i = 0; i < arr.Length; i++)
                {
                    //每执行1次,把最大的放在最后
                    for (int j = 0; j < arr.Length - 1; j++)
                    {
    int a = arr[j];
                        int b = arr[j + 1];
                        if (a>b)
                        {
                            arr[j+1] = a;
                            arr[j] = b;
                        }
                    }
                }
                return arr;
            }

    方法2

    public static int[] MaoPao2(int[] arr)
            {
                //执行多少次
                for (int i = arr.Length - 1; i >= 1; i--)
                {
                    //每执行1次,把最大的放在最后
                    for (int j = 0; j <= i - 1; j++)
                    {
    int a = arr[j];
                        int b = arr[j + 1];
                        if (a > b)
                        {
                            arr[j + 1] = a;
                            arr[j] = b;
                        }
                    }
                }
                return arr;
            }

    image

     

    2.选择排序

    找最晓小的,放在前面,再找第2个小的,直到找完。

    public static int[] XuanZhe(int[] arr)
            {
                int min, temp;
                //执行多少次
                for (int i = 0; i < arr.Length; i++)
                {
                    min = i; //最小值先取当前第1个
                    //j从第2个值开始取
                    for (int j = i + 1; j < arr.Length; j++)
                    {
                        if (arr[j] < arr[min])
                        {
                            min = j;
                        }   
                    }
                    //先把最小值取出来了,再操作
                    temp = arr[i];
                    arr[i] = arr[min];
                    arr[min] = temp;
                }
                return arr;
            }

    image

     

    3.插入排序

    后面一个和前面几个比较,是放前面,中间,还是后面。

    //插入排序
            public static int[] InsertSort(int[] arr)
            {
                int inner, temp;
                //执行多少次
                for (int i = 0; i < arr.Length; i++)
                {
                    temp = arr[i];
                    inner = i;
                    while (inner > 0 && arr[inner - 1] >= temp)
                    {
                        arr[inner] = arr[inner - 1];
                        inner -= 1;
                    }
                    arr[inner] = temp;
    
                    foreach (var item in arr)
                    {
                        Console.Write(item + " ");
                    }
                    Console.WriteLine();
                }
                return arr;
            }

    image

    冒泡和选择排序耗时差不多,插入耗时要长1半。。

  • 相关阅读:
    jni中调用java方法获取当前apk的签名文件md5值
    Android底层驱动开发(一)
    作为原作者你能忍吗?
    SUN dataset图像数据集下载
    计算机视觉和图像处理常用的一些标准图片
    Docker基础技术:DeviceMapper
    Docker基础技术:AUFS
    Docker基础技术:Linux CGroup
    Docker基础技术:Linux Namespace(下)
    Docker基础技术:Linux Namespace(上)
  • 原文地址:https://www.cnblogs.com/tangge/p/5338734.html
Copyright © 2020-2023  润新知