读书笔记第二篇:c#中常见的排序法

一:冒泡排序法,这种算法在其它语言也经常用到,大的数字像气泡一样向上冒,小的向下

int j,temp;
   j= 1;
    while((j<list.Length))
   {
       for(int i=0;i<list.Length -j;i++)
       {
            if(list[i]<list[i+1])
             {
               temp = list[i];       \\大的数向上,小的向下,依次排                                       
               list[i] = list[i+1];
               list[i+1] = temp;
            }
       }
         j++;
    }

二:选择排序法( 该排序法就是拿后面的数跟自己选择的比大小,既可以选从大到小排列,也可以从小到大,灵活性很大)

基本思想:对待排序的记录序列进行n-1遍的处理,第1遍处理是将L[0..n-1]中最小者与L[0]交换位置,第2遍处理是将L[1..n]中最小者与L[1]交换 位置,......,第i遍处理是将L中最小者与L交换位置。这样,经过i遍处理之后,前i个记录的位置就已经按从小到大的顺序排列好了。

public void SortChoice(int [] list)
 {
   
    int min;
    for(int i=0;i<list.Length-1;i++)      \\遍历这个表
     {
        min=i;                                      \\从小到大排列

        \\max=i ;                                     从大到小          
        for(int j=i+1;j<list.Length;j++)   \\小的向上,大的向下
       {
            if(list[j]<list[min])
                min=j;

          \\if(list[j]>list[min])     max=j;     \\小的向下,大的向上
        }
        int t=list[min];
        list[min]=list[i];
       list[i]=t;
   }
   
}

三:插入排序法(插入的是i值,比较的起点不是list[0])

public void SortInsert(int [] list)
 {
    for(int i=1;i<list.Length;i++)
    {
        int t=list[i];
        int j=i;
        while((j>0)&&(list[j-1]<t))   \\大的向上,小的向下
        {
           list[j]=list[j-1];
            --j;
        }
       list[j]=t;
    }
}

四:希尔排序(Shell Sort)是插入排序的一种优化。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。

   对希尔排序的理解:比如对于数组{9,38,36,65,13,76,27,49,4,11}

                  希尔排序一种分组插入排序。但就其实质就是逐步合并的过程。

                  先把序列分成5组,并组内排序:{9,38},{36,65},{13,76},{27,49},{4,11}

                  再将组分成3大组:{9,36,38,65},{13,27,49,76},{4,11}

                  然后分成2大组:{9,13,27,36,38,49,65,76},{4,11}

                  最后:{4,9,11,13,27,36,38,49,65,76}

                  每次合并都是最多O(n)的算法,合并的次数最多O(logn),因此希尔排序理论上是O(nlogn)的算法,

                  但由于需要大量的数组赋值,速度并不快。

public void SortShell(int [] list)
 {
     int inc;
     for(inc=1;inc<=list.Length/9;inc=3*inc+1);   \\增量的初值定义,以及循环方式
     for(;inc>0;inc/=3)                                       \\下一个增量
     {
         for(int i=inc+1;i<=list.Length;i+=inc)
         {
            int t=list[i-1];
            int j=i;
            while((j>inc)&&(list[j-inc-1]>t))
            {
                list[j-1]=list[j-inc-1];                        \\插入到正确的位置
                j-=inc;                                             \\后移
            }
            list[j-1]=t;                                  
        }
    }
}

先就写下这四种算法,个人目前新手,比较喜欢用冒泡和选择排序(囧)

实例: (待编辑)

转载于:https://www.cnblogs.com/minmin520/archive/2011/01/12/1933651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值