zoukankan      html  css  js  c++  java
  • 几种常见的排序算法

    1) 冒泡排序法

      例如 数组 3,9,27,6,18,12,21,15

           第一轮:

                   排序选择第一位数作为比较对象,依次比较后面的数,如果比3小就交换

          3,9,27,6,18,12,21,15   

          3,9,27,6,18,12,21,15

          3,9,27,6,18,12,21,15

          3,9,27,6,18,12,21,15

          3,9,27,6,18,12,21,15

          3,9,27,6,18,12,21,15

          3,9,27,6,18,12,21,15

           第二轮:选择第二位数作为比较对象,依次和后面的数比较

          3,9,27,6,18,12,21,15

          3,9,27,6,18,12,21,15

          3,6,27,9,18,12,21,15      9比6大则交换

          3,6,27,9,18,12,21,15

          3,6,27,9,18,12,21,15

          3,6,27,9,18,12,21,15

          3,6,27,9,18,12,21,15

      第三轮:选择第三位数作为比较对象,依次和后面的数比较

          3,6,27,9,18,12,21,15   27比9大则交换

          3,6,9,27,18,12,21,15

          3,6,9,27,18,12,21,15

          3,6,9,27,18,12,21,15

          3,6,9,27,18,12,21,15

          3,6,9,27,18,12,21,15

      第四轮:选择第四位数作为比较对象,依次和后面的数比较

          3,6,9,27,18,12,21,15    27比18大则交换

          3,6,9,18,27,12,21,15    18比12大则交换

          3,6,9,12,27,18,21,15

          3,6,9,12,27,18,21,15

      第五轮:选择第五位数作为比较对象,依次和后面的数比较

          3,6,9,12,27,18,21,15    27比18大则交换

          3,6,9,12,18,27,21,15

          3,6,9,12,18,27,21,15   18比15大则交换

          3,6,9,12,15,27,21,18

      第六轮:选择第六位数作为比较对象,依次和后面的数比较

          3,6,9,12,15,27,21,18   27比21大则交换、

          3,6,9,12,15,21,27,18   21比18大则交换

          3,6,9,12,15,18,27,21

      第七轮:选择第七位数作为比较对象,依次和后面的数比较

          3,6,9,12,15,18,27,21   27比21大则交换

          3,6,9,12,15,18,21,27

    以下是代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Research
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 };  //定义一个一维数组,并赋值
    14             foreach(int m in arr)           //循环遍历定义的一维数组,并输出其中的元素
    15             Console.Write(m + " ");
    16             Console.WriteLine();
    17             int j, temp;   //定义两个int类型的变量,分别用来表示数组下表和存储新的数组元素
    18             for(int i=0;i<arr.Length-1;i++)   //根据数据下标的值遍历数组元素
    19             { j = i + 1;
    20               id:                           //定义一个标识,以便从这里开始执行语句
    21                 if (arr[i] > arr[j])        //判断前后两个数的大小
    22                 {
    23                     temp = arr[i];           //将比较后大的元素赋值给定义的int变量
    24                     arr[i] = arr[j];         //将后一个元素的值赋值给前一个元素
    25                     arr[j] = temp;           //将int变量中存储的元素值赋值给后一个元素
    26                     goto id;                 //返回标识,继续判断后面的元素
    27                 }
    28                 else
    29                     if(j<arr.Length-1)       //判断是否执行到最后一个元素
    30                     {
    31                         j++;                   //如果没有,则再往后判断
    32                         goto id;                   //返回标识,继续判断后面的元素
    33                     }
    34             }
    35             foreach (int n in arr)              //循环遍历排序后的数组元素并输出
    36              Console.Write(n + " ");
    37             Console.WriteLine();
    38             Console.ReadLine();
    39             
    40 
    41              
    42         }
    43     }
    44 }

     2) 插入排序法

      例如 数组 3,9,27,6,18,12,21,15

      从第二位开始拿出数字插入前面排好的位置上

          3,9,27,6,18,12,21,15

          3,9,27,6,18,12,21,15

          3,6,9,27,18,12,21,15

          3,6,9,18,27,12,21,15

          3,6,9,18,27,12,21,15

          3,6,9,12,18,27,21,15

          3,6,9,12,15,18,21,27

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Research
     8 {
     9     class Program
    10     {
    11 
    12         static void Main(string[] args)
    13         {
    44             int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 };        //定义一个一维数组,并赋值
    45             foreach (int n in arr)                            //循环遍历定义的一维数组,并输出其中的元素
    46                 Console.Write("{0}", n + " ");
    47             Console.WriteLine();
    48             for (int i = 0; i < arr.Length; ++i)                        //循环访问数组中的元素
    49             {
    50                 int temp = arr[i];                            //定义一个int变量,并使用获得的数组元素值赋值
    51                 int j = i;
    52                 while ((j > 0) && (arr[j - 1] > temp))            //判断数组中的元素是否大于获得的值
    53                 {
    54                     arr[j] = arr[j - 1];                        //如果是,则将后一个元素的值提前
    55                     --j;
    56                 }
    57                 arr[j] = temp;                            //最后将int变量存储的值赋值给最后一个元素
    58             }
    59             Console.WriteLine("排序后结果为:");
    60             foreach (int n in arr)                            //循环访问排序后的数组元素并输出
    61                 Console.Write("{0}", n + " ");
    62             Console.WriteLine();
    63             Console.ReadLine();
    64             #endregion
    65 
    66 
    67 
    68         }
    69     }
    70 }

     3) 选择排序

          例如 数组 3,9,27,6,18,12,21,15

          选择一个第一个数作为比较数,依次和后面的数比较,找出后面比它小者交换

         3,9,27,6,18,12,21,15

         3,9,27,6,18,12,21,15  

      3,6,27,9,18,12,21,15

      3,6,9,27,18,12,21,15

      3,6,9,12,18,27,21,15

      3,6,9,12,15,27,21,18

      3,6,9,12,15,18,21,27

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Research
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                int[] arr = new int[] { 3, 9, 27, 6, 18, 12, 21, 15 };        //定义一个一维数组,并赋值
                foreach (int n in arr)                            //循环遍历定义一维数组,并输出其中的元素
                    Console.Write("{0}", n + " ");
                Console.WriteLine();
                int min;                                    //定义一个int变量,用来存储数组下标
                for (int i = 0; i < arr.Length - 1; i++)                //循环访问数组中的元素值(除最后一个)
                {
                    min = i;                                //为定义的数组下标赋值
                    for (int j = i + 1; j < arr.Length; j++)            //循环访问数组中的元素值(除第一个)
                    {
                        if (arr[j] < arr[min])                    //判断相邻两个元素值的大小
                            min = j;
                    }
                    int t = arr[min];                            //定义一个int变量,用来存储比较大的数组元素值
                    arr[min] = arr[i];                            //将小的数组元素值移动到前一位
                    arr[i] = t;                                //将int变量中存储的较大的数组元素值向后移
                }
                Console.WriteLine("排序后结果为:");
                foreach (int n in arr)                            //循环访问排序后的数组元素并输出
                    Console.Write("{0}", n + " ");
                Console.WriteLine();
                Console.ReadLine();
    
    
    
            }
        }
    }

         

  • 相关阅读:
    [Swift]LeetCode1093. 大样本统计 | Statistics from a Large Sample
    [Swift]鸡尾酒排序 | Cocktail Sort
    [Swift]插入排序 | Insertion sort
    [Swift]求最大公约数和最小公倍数
    [Swift]LeetCode1087. 字母切换 | Permutation of Letters
    [Swift]LeetCode1086. 前五科的均分 | High Five
    [Swift]LeetCode1088. 易混淆数 II | Confusing Number II
    [Swift]LeetCode1090. 受标签影响的最大值 | Largest Values From Labels
    [Swift]LeetCode1091. 二进制矩阵中的最短路径 | Shortest Path in Binary Matrix
    [Swift]LeetCode1092. 最短公共超序列 | Shortest Common Supersequence
  • 原文地址:https://www.cnblogs.com/MiyaQian/p/4139666.html
Copyright © 2011-2022 走看看