谈谈八大排序算法问题

排序算法可以说是算法的入门以及算法学习阶段的基石,排序算法显得那么的基础又是非常重要的一种算法。排序算法常常作为一些高阶算法的数据处理中间过程在实际的问题处理中被应用的最为广泛,因此算法选将阶段就从八大排序算法开始。在本节内容中既可以看到一般性的比如插入排序,冒泡排序等基础算法又可以看到比如基数排序,位图排序,快速排序等等比较难理解的算法,算法之门从排序算法说起。

1.插入排序

插入排序算法的原理很简单,默认A中有一部分数据已经排好序了,后续只要从没有排好序的序列里面每拿出一个数字就在排好序的序列中从右向左依次寻找合适的位置进行放置就可以了插入排序伪代码 :A.length-1代表数列A的长度,时间复杂度 O(n^2) 使用场景:当所需要排序的数值规模比较小时使用该方法比较好

for j=1 to A.lengrh-1

 key = a[j]
 insert a[j] into the sorted sequence A[0,j-1]
i= j-1
while i>=0 and a[i] > key
  a[i+1] = a[i]
     i = i-1
 a[i+1] = key

template <typename T>
T INSERTION_SORT(T * A ,int& length)
{
  if(NULL == A || length <=0)
  {
    printf("输入错误\n");
    return -1;
  }
  int i_tmp = 0;
  int j_tmp = 0;
  T key = 0;
  for(j_tmp=1;j_tmp<length;j_tmp++)
  {
    key = A[j_tmp];
    i_tmp = j_tmp-1;
    while((i_tmp >=0) && (A[i_tmp] > key))
    {
      A[i_tmp+1] = A[i_tmp];
      i_tmp -= 1;
    }
    A[i_tmp+1] = key;
  }
  return 0;
}

2.分治排序(未完待续)

时间: 2025-01-01 21:30:31

谈谈八大排序算法问题的相关文章

八大排序算法源码 + 耗时长度比较(看到好东西转下)

八大排序算法的排序时间长度的比较,测试数据10000000时部分结果如下 输入测试数据长度: 10000000数据初始化中...数据初始化完成!        堆排序用时:    8秒 499毫秒      快速排序用时:   22秒  35毫秒      归并排序用时:   34秒 473毫秒 另外五种排序本人并未等待结果,读者可自行测试 测试时请注意内存消耗,以免数据太大,内存不够,可自行测试单一算法以便增加可测试数据数目 #include <iostream> #include <

数据结构与算法之——八大排序算法

附:关于这个主题,网上好的文章已经数不胜数,本篇是整合后的文章. 正文: 一.概述 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 本文所指八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 二.排序算法详述 1.

[Data Structure] 八大排序算法

排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序算法体系结构图: 1. 直接插入排序(Straight Insertion Sort ) 基本思想:将待排序的无序数列看成是一个仅含有一个元素的有序数列和一个无序数列,将无序数列中的元素逐次插入到有序数列中,从而获得最终的有序数列. 算法流程: 1)初始时, a[0]自成一个有序区, 无序区为a[1

(转)详解八大排序算法

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到

排序算法(九)——八大排序算法总结

八大排序算法的稳定性及复杂度总结如下: 选择排序算法准则 每种排序算法都各有优缺点.因此,在实用时需根据不同情况适当选用,甚至可以将多种方法结合起来使用. 影响排序的因素有很多,平均时间复杂度低的算法并不一定就是最优的.相反,有时平均时间复杂度高的算法可能更适合某些特殊情况.同时,选择算法时还得考虑它的可读性,以利于软件的维护.一般而言,需要考虑的因素有以下四点: 1.待排序的记录数目n的大小: 2.记录本身数据量的大小,也就是记录中除关键字外的其他信息量的大小: 3.关键字的结构及其分布情况:

八大排序算法学习笔记:冒泡排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 算法原理: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有

八大排序算法学习笔记:插入排序(一)

插入排序     包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序).属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置) . 直接插入排序: 1.算法的伪代码(这样便于理解):     INSERTION-SORT (A, n)             A[1 . . n] for j ←2 to n do key ← A[ j] i ← j – 1 while i > 0 and A[i] > key do A[i+1] ← A[i]

八大排序算法学习笔记:插入排序(二分插入排序)

二分插入排序   也称折半插入排序, 1.基本思想:设数列[0....n]分为两部分一部分是[0...i]为有序序列,另一部分是[i+1.....n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 x 在有序序列中的插入位置并插入,有序序列还是有序的,接下来重复上述步骤,直到无序序列全部插入有序序列 ,这是整个序列只剩下有序序列即有序了. 2.代码:    3.复杂度: 用二分插入排序所要进行的总比较次数为O(lgn),当n较大时,比直接插入排序的最大比较次数小得多,但大于最小比较

算法基础——经典八大排序算法的Java及Python实现

概述 八大排序算法不用多说了,程序员算法基础必须要掌握的,现在总结一下加深记忆.下图是这八大排序算法的分类.名称.时间空间复杂度,以及稳定性. 代码 以下是经典八大排序算法的Java及Python代码,都是基于经典算法书籍<算法导论>里的伪代码实现的,我在关键语句部分附上了注释. 按照上图中的顺序分别介绍八大排序算法的实现(升序),前面是Java,后面是Python.Java的排序函数写在了一个类里,Python的排序函数则直接写出来了. 直接插入排序 public class InsertS