问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

asp.net C#中四种常用排序法哪个比较快,哪个比较好?

发布网友 发布时间:2022-04-24 00:42

我来回答

2个回答

热心网友 时间:2022-04-27 09:53

1 选择排序
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[1]与a[3]的值,若a[1]大于a[3]则交换两者的值,否则不变。再比较a[1]与a[4],以此类推,最后比较a[1]与a[n]的值。这样处理一轮后,a[1]的值一定是这组数据中最小的。再将a[2]与a[3]~a[n]以相同方法比较一轮,则a[2]的值一定是a[2]~a[n]中最小的。再将a[3]与a[4]~a[n]以相同方法比较一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。
优点:稳定,比较次数与冒泡排序一样;
缺点:相对之下还是慢。

2 插入排序
已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、b[2]、……b[m],需将二者合并成一个升序数列。首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来a[x]的位置这就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若无数组a,可将b[1]当作n=1的数组a)
优点:稳定,快;
缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。

3 归并排序
由希尔在1959年提出,又称希尔排序(shell排序)。
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。发现当n不大时,插入排序的效果很好。首先取一增量d(d<n),将a[1]、a[1+d]、a[1+2d]……列为第一组,a[2]、a[2+d]、a[2+2d]……列为第二组……,a[d]、a[2d]、a[3d]……列为最后一组以次类推,在各组内用插入排序,然后取d'<d,重复上述操作,直到d=1。
优点:快,数据移动少;
缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取。

4 快速排序
快速排序是冒泡排序的改进版,是目前已知的最快的排序方法。
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据a[x]作为基准。比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据<a[x],a[k+1]~a[n]中的每一个数据>a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n]两组数据进行快速排序。
优点:极快,数据移动少;
缺点:不稳定。 转自:http://zhidao.baidu.com/question/97514844.html?si=1

热心网友 时间:2022-04-27 11:11

归并排序算法  合并排序(MERGE SORT)是又一类不同的排序方法,合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。它的基本思想就是假设数组A有N个元素,那么可以看成数组A是又N个有序的子序列组成,每个子序列的长度为1,然后再两两合并,得到了一个 N/2 个长度为2或1的有序子序列,再两两合并,如此重复,直到得到一个长度为N的有序数据序列为止,这种排序方法称为2—路合并排序。
  例如数组A有7个数据,分别是: 49 38 65 97 76 13 27,那么采用归并排序算法的操作过程如图7所示:
  初始值 [49] [38] [65] [97] [76] [13] [27]
  看成由长度为1的7个子序列组成
  第一次合并之后 [38 49] [65 97] [13 76] [27]
  看成由长度为1或2的4个子序列组成
  第二次合并之后 [38 49 65 97] [13 27 76]
  看成由长度为4或3的2个子序列组成
  第三次合并之后 [13 27 38 49 65 76 97]
  合并算法的核心操作就是将一维数组中前后相邻的两个两个有序序列合并成一个有序序列。合并算法也可以采用递归算法来实现,形式上较为简单,但实用性很差。合并算法的合并次数是一个非常重要的量,根据计算当数组中有3到4个元素时,合并次数是2次,当有5到8个元素时,合并次数是3次,当有9到16个元素时,合并次数是4次,按照这一规律,当有N个子序列时可以推断出合并的次数是X(2 >=N,符合此条件的最小那个X)。
  其时间复杂度为:O(nlogn).所需辅助存储空间为:O(n)
  归并算法如下:
  long merge(long *A,long p,long q,long r)
  {
  long n1,n2,i,j,k;
  long *L,*R;
  n1=q-p+1;
  n2=r-q;
  L=(long *)malloc((n1+2)*sizeof(long));
  R=(long *)malloc((n2+2)*sizeof(long));
  for(i=1;i<=n1;i++)
  L=A[p+i-1];
  for(j=1;j<=n2;j++)
  R[j]=A[q+j];
  L[n1+1]=R[n2+1]=RAND_MAX;
  i=j=1;
  for(k=p;k<=r;k++)
  {
  if(L<=R[j])
  {
  A[k]=L;
  i++;
  }
  else
  {
  A[k]=R[j];
  j++;
  }
  }
  free(L);
  free(R);
  return 0;
  }
  long mergesort(long *A,long p,long r)
  {
  long q;
  if(p<r)
  {
  q=(p+r)/2;
  mergesort(A,p,q);
  mergesort(A,q+1,r);
  merge(A,p,q,r);
  }
  return 0;
  }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
intel 英特尔 酷睿 i5-9400F CPU 2.9GHz 6核6线程-详细介绍 vivo手机越用网络越慢 怎么检测 二手苹果电脑交易注意买二手苹果笔记本电脑应注意什么 比如我买一个二手笔记本卖家笔记本预装正版win10的话把他账号注销登录我... 二手苹果笔记本怎么更改账户 军婚假期有多少天 金立e6mini开机出现el 甘肃基层卫生主要内容 甘肃基层医疗卫生系统怎么撤销处方 天津市选调生通过面试了不去会怎么样 欠信用卡半年没还会坐牢吗? 小天才电话手表开通了流量,为什么还是不能显示G? 为什么很多ASP.NET网页初次访问很慢,以后几次访问很快 欠信用卡不还会坐牢吗? 小天才手表显示G,但网络不稳定咋回事 国内asp.net快速开发工具哪个好 信用卡逾期不还会被抓坐牢吗? 小天才好状元g50多少钱 asp.net和jsp那个运行速度快 小天才学习机G50-x13和G5o那款机子好一些 ASP.net网页制作 怎样更快 asp.net怎么学更快 我在中信银行信用卡严重逾期八个月欠7400元会不会坐牢?今天接到了他们的电话说这两三天就要下来调查 小天才g50参数 ASP.NET怎样学的快一些? 信用卡不还会怎样?会坐牢吗? 小天才G50和G60哪个好 银行信用卡不还会坐牢吗 学习ASP.NET 有什么快速的方法? 我有6张银行信用卡都逾期8个多月了,现在没有能力还那么多,请问我会被起诉坐牢吗? 中信银行信用卡逾期八个月未还欠7400元会坐牢么? 小天才手表g6卡顿如何处理 发布的asp.net网站突然变得时慢时快的,怎么解决 小天才电话手表有信号,就是没有g显示,是什么问题 信用卡没能力还会坐牢吗? 小天才状元机g31能插手机卡吗? asp.net 查询大数据量(百万条以上)如何快 小天才平板电脑g31激活码 小天才G50 梦到水很清澈,水里有很多蝎子,蜈蚣,螃蟹是何意思? 梦见洗手池周围爬满了螃蟹蝎子找人借了清洗药水喷死了 小天才手表为什么不显示G 梦见一大湖水,旁边有人,还有蝎子和螃蟹? 梦见很多蝎子是怎么回事? 海信A8电视如何搜台? 手机开机自动重启,是触摸屏的问题还是主板问题? 海信液晶电视插上有线电视怎么搜台? 你好,手机经常自动重启是什么原因 现在做外卖送餐员怎样啊?好不好做?困难主要是什么呢?求介绍 叮咚买菜的骑手好做吗?