• 常見的几种排序方式


    內容:

        1、冒泡排序

        2、选择排序

        3、插入排序

        4、希尔排序

     一、冒泡排序

       冒泡排序思想:每遍历数组一次将数组中剩下的最大的排到本次遍历数组的最后。

       1.每次遍历均是从数组的第一个元素开始的

       2.两层for循环,第一层用来控制遍历的次数,为陈列的长度-1;第二层用来找到本次循环中元素的最大值,并将其排到本次数组的最后。

      示例代码:

     1 public int[] maopaoSort(int[] arr)
     2         {
     3             if (arr.Length == 0)
     4             {
     5                 Console.WriteLine("空數組");
     6             }
     7             else
     8             {
     9                 for (int i = 0; i < arr.Length - 1; i++)
    10                 {
    11                     for (int j = 0; j < arr.Length - 1 - i; j++)
    12                     {
    13                         if (arr[j] > arr[j + 1])
    14                         {
    15                             int temp = arr[j];
    16                             arr[j] = arr[j + 1];
    17                             arr[j + 1] = temp;
    18                         }
    19                     }
    20                 }
    21             }
    22             return arr;
    23         }
    冒泡排序

    二、选择排序

       选择排序思想:每次遍历数组将剩余数组中的最小值排到本次遍历陈列的最前面

       1.两层for循环,第一层用于控制循环的次数,第二层循环用于找到本次循环中的最小值,并将其排到本次循环体的最前面

      示例代码:

     1 public int[] xuanzeSort(int[] arr)
     2         {
     3             if (arr.Length == 0)
     4             {
     5                 Console.WriteLine("空數組");
     6             }
     7             else
     8             {
     9                 for (int i = 0; i < arr.Length; i++)
    10                 {
    11                     for (int j = i + 1; j < arr.Length; j++)
    12                     {
    13                         int temp;
    14                         //不斷的將最小的送到arr[i]的面前,直到迴圈結束
    15                         if (arr[i] > arr[j])
    16                         {
    17                             temp = arr[i];
    18                             arr[i] = arr[j];
    19                             arr[j] = temp;
    20                         }
    21                     }
    22                 }
    23             }
    24             return arr;
    25         }
    选择排序

    三、插入排序

       插入排序思想:假设陈列中前n-1个都排好序了,现在将数组中的第几个放到前面已排好序的数组中使得这n个数任然是一个排好序的数组。

       1.有一个for循环,先将数组中的前两个数排序,然后再将前三个数排序,

       2.每次都是从后向前排序,直到找到合适的位置

    示例代码:

     1 public int[] charuSort(int[] arr) {
     2             if (arr.Length == 0)
     3             {
     4                 Console.WriteLine("空數組");
     5             }
     6             else {
     7                 for (int i = 0; i < arr.Length; i++)
     8                 {
     9                     int temp;
    10                     int j = i;
    11                     while (j>0 && arr[j-1]>arr[j])
    12                     {
    13                         temp=arr[j];
    14                         arr[j] = arr[j - 1];
    15                         arr[j - 1] = temp;
    16                         --j;
    17                     }
    18                 }
    19             }
    20             return arr;
    21         }
    选择排序

    四、希尔排序
       希尔排序思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。

       1.先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直到所取的增量dt=1

    示例代码:  

     1 public int[] shellSort(int[] arr) {
     2             int k = arr.Length / 2;  //設置步長
     3             while (k>0)
     4             {
     5                 for (int i = k; i < arr.Length; i++)
     6                 {
     7                     int t = arr[i];
     8                     int j = i - k;
     9                     while (j>=0 && t<arr[j])
    10                     {
    11                         arr[j + k] = arr[j];
    12                         j = j - k;
    13                     }
    14                     arr[j + k] = t;
    15                 }
    16                 k /= 2;
    17             }
    18             return arr;
    19         }
    希尔排序

    参考资料:http://www.cnblogs.com/WangJinYang/p/3553792.html

  • 相关阅读:
    Spark Streaming源码解读之Receiver生成全生命周期彻底研究和思考
    linux 修改时间时区,修改语言
    远程链接mysql error 2003
    Android NDK r10c 编译boost 1.55 (使用Cygwin)
    linux上cocos2dx Android打包环境
    linux上cocos2dx 环境配置
    linux, windows编译安装 boost库 (boost 1.56)
    编译安装 gcc 4.8.3
    vim配置添加python
    mvn设置
  • 原文地址:https://www.cnblogs.com/xiaowuzi/p/3554478.html
Copyright © 2020-2023  润新知