zoukankan      html  css  js  c++  java
  • 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         }
    落霞与孤鹜齐飞,秋水共长天一色。
  • 相关阅读:
    poj 2763 Housewife Wind
    hdu 3966 Aragorn's Story
    poj 1655 Balancing Act 求树的重心
    有上下界的网络流问题
    URAL 1277 Cops and Thieves 最小割 无向图点带权点连通度
    ZOJ 2532 Internship 网络流求关键边
    ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
    SGU 438 The Glorious Karlutka River =) 拆点+动态流+最大流
    怎么样仿写已知网址的网页?
    5-10 公路村村通 (30分)
  • 原文地址:https://www.cnblogs.com/sening/p/3695625.html
Copyright © 2011-2022 走看看