• c#排序


    插入排序:

     1  class Class1
     2     {
     3         /*先将第一个记录视为一个有序序列,然后依次将后面的记录插入到这个有序序列中来。
     4          * 每次要插入的记录时,须从后往前依次比较有序序列中的记录,直到找到在有序序列中的位置,
     5          * 记录下该位置,该位置开始的每个记录都后移一位,然后将插入记录插入该位置。这样每插入一个记录进去,
     6          * 有序序列长度加1,剩余记录减1,直到所有记录都插入到有序序列中,排序完成。*/
     7         public void InsertionSort()///插入排序法
     8         {
     9             int[] arr = new int[]{30,45,54,13,49,45};
    10             int inner, temp;
    11             for (int outer = 1; outer <= arr.Length-1; outer++)//每当一次内层循环,有序序列加1
    12             {
    13                 temp = arr[outer];//temp代表要插入的数
    14                 inner = outer;
    15                 while (inner > 0 && arr[inner - 1] >= temp)//inner-1代表有序序列的最大值索引,每次循环减1
    16                 {
    17                     arr[inner] = arr[inner - 1];//有序记录后移
    18                     inner--;
    19                 }
    20                 arr[inner] = temp;
    21             }
    22             foreach(int i in arr)
    23             {
    24                 Console.WriteLine(i);
    25             }
    26             Console.ReadKey();
    27         }
    28     }

    基本冒泡排序法:

     1  public void BubbleSort()///基本冒泡排序法
     2         {
     3             int temp;
     4             for (int outer = upper; outer > 0; outer--)//因为最后只有一个数的时候,就是最小的,不用再排,所以outer>0
     5             {
     6                 for (int inner = 0; inner < outer; inner++)//内层遍历每次遍历中都把最大的数排到了最后
     7                 {
     8                     if (arr[inner] > arr[inner + 1])   //从第一个数开始遍历,前面一个比后面一个大进行交换;temp是一个局部变量,用来存放交换过程中的值
     9                     {
    10                         temp = arr[inner];
    11                         arr[inner] = arr[inner + 1];
    12                         arr[inner + 1] = temp;
    13                     }
    14                 }
    15             }
    16        }

    改进冒泡排序:

    /*改进冒泡比基本冒泡多了一个i=0的判断,应该是多了一种特殊情况的判断若记录序列的初始状态为"正序",
             * 则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次比较,没有进入if判断和交换
             * 且不移动记录;反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动*/
           public void BubbleSort()///改进冒泡排序法
            {
                int temp, i;
                for (int outer = upper; outer > 0; outer--)
                {
                    i = 0;
                    for (int inner = 0; inner < outer; inner++)
                    {
                        if (arr[inner] > arr[inner + 1])
                        {
                            temp = arr[inner];
                            arr[inner] = arr[inner + 1];
                            arr[inner + 1] = temp;
                            i++;
                        }
                    }
                    if (i == 0)
                        break;
                }
            }

    选择排序法:

     1  public void SelectionSort()///选择排序法
     2         {
     3             int min, temp;
     4             for (int outer = 0; outer <= upper; outer++)
     5             {
     6                 min = outer;                       //min代表数组未排序部分最前面的索引
     7                 for (int inner = outer + 1; inner <= upper; inner++)//再一次遍历中会找到数组最小数的索引
     8                 {
     9                     if (arr[inner] < arr[min])     //如果数组的后一个数小于被比较的数
    10                         min = inner;               //就将后一个数的索引赋值给min
    11                 }
    12                 temp = arr[outer];            //outer代表了在一次遍历中被比较数的索引,min代表了在一次遍历中最小数的索引,
    13                 arr[outer] = arr[min];       //把这两个数交换
    14                 arr[min] = temp;
    15             }
    16         }
    落霞与孤鹜齐飞,秋水共长天一色。
  • 相关阅读:
    php 三元运算符简洁用法
    Linux 获取网卡信息
    《构建之法》读后感
    毫秒数据字符串转换为DateTime
    POST请求——HttpWebRequest
    多个不同类对象传输思路
    WCF 大文件传输配置
    WCF配置文件详解
    C# 元组、匿名对象、ref&out
    C#控制台关闭之前做一些操作
  • 原文地址:https://www.cnblogs.com/sening/p/3695625.html
Copyright © 2020-2023  润新知