zoukankan      html  css  js  c++  java
  • 数据结构之排序算法

    简单排序方法1.直接插入排序
    直接插入排序(direct Insert Sort)的基本思想是:顺序地将待排序的记录按其关键码的大小插入到已排序的记录子序列的适当位置。
    子序列的记录个数从开始逐渐增大,当子序列的记录个数与顺序表中的记录个数相同时排序完毕。设待排序的顺序表 sqList 中有 n
    个记录,初始时子序列中只有一个记录qList[0]。第一次排序时,准备把记录 sqList[1]插入到已排好序的子序列中这时只需要比较
    sqList[0]和 sqList[1]的大小,若 sqList[0]≤sqList[1],说明序列已有序,否则将 sqList[1]插入到 sqList[0]的前面,这样子序列
    的大小增大为 2。第二次排序时,准备把记录 sqList[2]插入到已排好序的子序列中,这需要先比较 sqList[2] 和 sqList[1]以确定是
    否需要把 sqList[2]插入到qList[1]之前。如果 sqList[2]插入到 sqList[1]之前,再比较 sqList[2]和qList[0]以确定是否需要把
    sqList[2]插入到 sqList[0]之前。这样的过程一直进行到 sqList[n-1]插入到子序列中为止。这时,顺序表 sqList 就是有序的。直接
    插入排序的算法如下所示,算法中记录的比较表示记录关键码的比较顺序表中只存放了记录的关键码:
    1.直接插入排序

    public static void InsertSort(IList<int> sqList)
    {
      for(int i = 1; i < sqList.Count; ++i)
       {
           if( sqList[i] < sqList[i - 1])
           {
               int tmp = sqList[i];
               int j = 0;
               for(j=i-1;j>=0&& tmp < sqList[j]; --j)
               {
                   sqList[j + 1] = sqList[j];//将大于temp的值整体后移一个单位
               }
               sqList[j + 1] = tmp;
           }
        }
    }

    2.冒泡排序
    冒泡排序(Bubble Sort)的基本思想是:将相邻的记录的关键码进行比较,前面记录的关键码大于后面记录的关键码,则将它们交换,
    否则不交换。 设待排序的顺序表 sqList 中有 n 个记录,冒泡排序要进行 n-1 趟,每趟循均是从最后两个记录开始。第 1 趟循环
    到第 2 个记录的关键码与第 1 个记录的键码比较后终止,第 2 趟循环到第 3 个记录的关键码与第 2 个记录的关键码比结束后终止。
    一般地,第 i 趟循环到第 i+1 个记录的关键码与第 i 个记录的关码比较后终止,所以,第 n-1 趟循环到第 n 个记录的关键码与
    第 n-1 个记录的键码比较后终止。

     public static void BubbleSort(IList<int> sqList)
     {
           int tmp;
           for(int i = 0; i < sqList.Count; i++)
           {
                for(int j=sqList.Count-1; j >i;j--)
                {
                     if(sqList[j] < sqList[j-1])
                     {
                         tmp = sqList[j];
                         sqList[j] = sqList[j-1];
                         sqList[j-1] = tmp;
                      }
               }
         }
    }

    3.简单选择排序
    简单选择排序(Simple Select Sort)算法的基本思想是:从待排序的记录序中选择关键码最小(或最大)的记录并将它
    与序列中的第一个记录交换位置后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将
    与序列中的第二个记录交换位置;如此重复,直到序列中只剩下一个记录为止设待排序的顺序表 sqList 中有 n 个记录,
    简单选择排序要进行 n-1 趟,第从 n 个记录选择关键码最小(或最大)的记录并与第 1 个记录交换位置;第
    从第 2 个记录开始的 n-1 个记录中选择关键码最小(或最大)的记录并与第记录交换位置。一般地,第 i 趟从第 i 个
    记录开始的 n-i+1 个记录中选择关码最小(或最大)的记录并与第 i 个记录交换位置,所以,第 n-1 趟比较最后
    个记录选择关键码最小(或最大)的记录并与第 n-1 个记录交换位置。

    //3.简单选择排序
            public static void SimpleSelectSort(IList<int> sqList)
            {
                int tmp = 0;
                int t = 0;
                for(int i=0; i< sqList.Count; i++)
                {
                    t = i;
                    for(int j=i+1; j < sqList.Count; j++)
                    {
                        if(sqList[t] > sqList[j])
                        {
                            t = j;
                        }
                    }
                    tmp = sqList[i];
                    sqList[i] = sqList[t];
                    sqList[t] = tmp;
                }
            }
  • 相关阅读:
    [置顶] Android自定义控件大全
    与机房收费系统图的初步情结
    队列用链表实现(建立,插入新元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空)
    数据结构 练习 16-动态规划
    windows和linux在建筑python集成开发环境IDE
    圆角盒演习(1)
    tortoise svn无法识别subversion check向下代码来解决
    CSS+DIV+JQuery实际的视频汇总
    【Android开发经验】Android举UI设计经验
    程序猿什么样的角色代表了这个号码?你想过这个问题?
  • 原文地址:https://www.cnblogs.com/gylhaut/p/6131861.html
Copyright © 2011-2022 走看看