数据结构中的排序算法总结

数据结构中的排序算法

当待排序序列基本有序时优先选择简单排序,快速排序平均次数少于堆排序

1   插入排序

1)  直接插入排序

第一次将位置0和位置1进行比较,小的放前。

第二次将位置2上的数字,插入到位置0和位置1中。

第k次将位置k上的数字,插入到第k-1次已经完成的序列中。

    5  2  6  0  3  9  1  7  4  8

一趟  2  5  6  0  3  9  1  7  4  8

二趟  2  5  6  0  3  9  1  7  4  8

三趟  0  2  5  6  3  9  1  7  4  8

四趟  0  2  3  5  6  9  1  7  4  8

五趟  0  2  3  5  6  9  1  7  4  8

六趟  0  1  2  3  5  6  9  7  4  8

七趟  0  1  2  3  5  6  7  9  4  8

八趟  0  1  2  3  4  5  6  7  9  8

九趟  0  1  2  3  4  5  6  7  8  9

2)希尔排序

先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。

         49  38  65  97  76  13  27  49  55  04

第一趟增量5  13  27  49  55  04  49  38  65  97  76

第二趟增量3  13  04  49  38  27  49  55  65  97  76 

第三趟增量1  04  13  27  38  49  49  55  65  76  97     

2   选择排序

选择排序每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

每次都是遍历一遍剩下要排序的部分,找出其最大值或最小值。关键码比较次数与记录地初始排列无关

1)直接选择排序

第一次取区间[0,N],选择该区间最小的数和位置0的数进行交换;

第二次取区间[1,N],选择该区间最小的数和位置1的数进行交换;

第三次取区间[2,N],选择该区间最小的数和位置2的数进行交换;

依次往下,可以得到排序,这就是选择排序。

ex
       8  5  9  3  7

遍历1号  3  5  9  8  7

遍历2号  3  5  9  8  7

遍历3号  3  5  7  8  9

遍历4号     3  5  7  8  9

2)堆排序

3  交换排序

1)冒泡排序

第一次取区间[0,N],通过比较第i个和第i+1个的大小,如果第i+1个数字小于第i个,则互换。

第二次取区间[0,N-1],通过比较第i个和第i+1个的大小,如果第i+1个数字小于第i个,则互换。

2)快速排序

1从序列当中选择一个基准数(pivot)

2将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧

重复步骤1.2,直到所有子集当中只有一个元素为止。

4  归并排序

原文地址:https://www.cnblogs.com/52circle/p/9176290.html

时间: 2024-10-23 02:48:14

数据结构中的排序算法总结的相关文章

数据结构中的排序算法

上一篇介绍了冒泡排序,现在介绍一下其他的排序算法 各种排序的稳定性,时间复杂度和空间复杂度总结: 3.选择排序 直接选择排序算法的思想比较简单:(假设数据放在一个数组a中,且数组的长度是N) 1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置 2:从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第1步结束后a[0]就是N个数的最小值) 3:从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第2步结束后a[1]就是N-1个数的最小值) 以此类推,

数据结构中常用排序算法

排序常用的算法有:插入算法(直接插入算法.折半插入算法.希尔算法).选择算法(简单选择算法.堆排序算法).快速算法(冒泡排序.快速排序算法) 以下程序给出了各种算法的实现,其接口为void sort(int *array,int len),每个文件实现一个算法, 最后和main.c文件编译实现. 1.直接插入算法: //direct_insert_sort.c [cpp] view plaincopy void sort(int *array,int len) { int tmp,i,j; fo

数据结构中的排序方法

冒泡排序 冒泡排序是排序算法中思想最简单的一种排序方法,通过比较相邻的两个数据,移动相邻数据中的较大者(后移).第一趟在A[0]-A[n-1]中从前往后进行两个相邻元素的比较,若后者小则交换,比较n-1次:第一趟比较结束,最大的元素确定位置,下一趟则在剩下的n-1个元素中继续上述操作.举个例子:初始序列(48,36,68,72,12,48,02),第一次比较(36,48,68,72,12,48,02),第二次比较(36,48,68,72,12,48,02),第三次比较(36,48,68,72,1

数据结构中常见经典算法

华山大师兄 排序:拓扑排序算法 字典序算法 编程珠玑:位图法排序 树:红黑树总结 B+树与B*树小结 B-树小结汇总 平衡二叉树(AVL树)小结 Trie--字典树 图的遍历:深度优先遍历与广度优先遍历 最小生成树:最小生成树-Prim算法和Kruskal算法 最短路径:最短路径—Dijkstra算法和Floyd算法

数据结构中基本查找算法总结

基本查找算法    一.查找的基本概念 查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作.查找是一种操作. 二.顺序查找 针对无序序列的一种最简单的查找方式. 时间复杂度为O(n). 三.折半查找 针对已排序序列的一种查找方式.并且只适用于顺序存储结构的序列.要求序列中的元素基本不变,在需要做删除和插入操作的时候,会影响检索效率. 时间复杂度为O(logN). 四.B树 B树又称二叉排序树(Binary Sort Tree). 1.概念:   它或者是一棵空树:或者是具有

数据结构—各类‘排序算法’实现(上)

数据结构中的排序算法分为比较排序,非比较排序.比较排序有插入排序.选择排序.交换排序.归并排序,非比较排序有计数排序.基数排序.下面是排序的具体分类: 1.直接排序 主要思想:使用两个指针,让一个指针从开始,另一个指针指向前一个指针的+1位置,两个数据进行比较 void InsertSort(int* a, size_t size) {      assert(a);      for (size_t i = 0; i < size - 1; i++)      {           int 

排序算法之交换排序

首先,上脑图. 1.为什么要学习排序算法? 这是算法学习的基础,经典的排序算法有着很广泛的用途,一遍遍的被人所使用.而且,在面试找工作的时候,数据结构中的排序算法,也是一个很重要的基本功,经常会被用人单位拿来出题目. 2.如何学习排序算法? 第一步是理解排序算法的原理,这也是最重要的一步. 第二步就是看经典的算法实现,抠细节一个个理解原理到实现经过了哪些变化. 第三部是用纸把算法实现抄一遍,这个时候会发掘出认识和实际的偏差. 第四步是把算法默写出来,这也是很重要的一步,类似于牛吃了食物之后的反刍

内部排序算法比较

一.题目描述 通过随机数据比较各排序算法的关键字比较次数和关键字移动次数,以 及执行时间,取得直观感受. 二.设计要求 一.需求分析 实现各排序算法,分别进行以下各组比较,并进行总结. 一.各算法在不同规模下的比较. 1)比较范围:直接插入排序.冒泡法排序.简单选择排序.快速排序1(自己实现).快速排序2(调用STL).归并排序. 2)比较指标:a)关键字操作次数(比较次数和移动次数之和),b)排序时间.每个指标采用多次重复取平均数记录,重复次数不小于100.注:1次关键字对换按3次移动计算.

数据结构中的7种排序算法

数据结构中的7种排序算法 排序是将一个记录的任意序列重新排列成一个按键值有序的序列. 时间复杂度主要考虑元素的移动次数. 结构如下: 1.直接插入排序 1,定义:依次将待排序序列中的每一个记录插入到一个已经排好序的序列中,直到全部记录都排好序. 2,时间复杂度:在最好情况下,待排序序列为正序,时间复杂度为O(n):最坏情况下,待排序序列为逆序,时间复杂度为O(n^2);平均情况下,时间复杂度为O(n^2). 3,空间复杂度:O(1). public static void insertSort(