排序之概述

※、很多发布年代不清楚,如果你知道,如果你愿意,不妨告诉我和大家(包括这里没有列举且你认为有必要列举的)。

根据排序过程中涉及的存储器不同,可以将排序方法分为分内部排序和外部排序。在内部排序中,根据排序过程中所依据的原则可以分为5类:插入排序、交换排序、选择排序、归并排序和基数排序;根据排序过程的时间复杂度来分,可以分为三类:简单排序、先进排序、基数排序。

评价排序算法优劣的标准主要是两条:一是算法的运算量,这主要是通过记录的比较次数和移动次数来反应;另一个是执行算法所需要的附加存储单元的的多少。

■稳定的排序

冒泡排序,在1956年就已经被研究。

鸡尾酒排序

插入排序

直接插入排序

折半插入排序(二分插入排序)

桶排序

计数排序

归并排序,1945年由约翰?冯?诺伊曼首次提出。

二叉树排序

鸽巢排序

基数排序

基数排序

侏儒排序

基本概念:

图书馆排序,在2004年被发表。

■不稳定的排序

选择排序

希尔排序,由1959年公布。

clover排序(三叶草排序)

梳排序,于1980年所发明的不稳定排序算法。

堆排序,在1964年共同发明了著名的堆排序算法。

平滑排序

快速排序

内省排序,是由David Musser在1997年设计的排序算法。

耐心排序

■不实用的排序

bogo排序

stupid排序

珠排序

煎饼排序

臭皮匠排序

■java的实现

byte   DualPivotQuicksort

char   DualPivotQuicksort

short  DualPivotQuicksort

int    DualPivotQuicksort

long   DualPivotQuicksort

float  DualPivotQuicksort

double DualPivotQuicksort

Object mergeSort/ComparableTimSort

T      mergeSort/ComparableTimSort

时间: 2024-10-16 02:24:51

排序之概述的相关文章

排序算法--概述和参考

1 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 2 参考 http://blog.csdn.net/hguisu/article/details/77

排序算法概述

提到排序算法我们要知道两个经常提到的概念:(1)排序算法的稳定性:所谓“稳定性”是 指,在待排序数组出现的两个相同的元素,排序之后相对维持保持不变.比如:待排序数组为arr[] = {1,4,3,1},排序之后元素变为arr_new[] = {1,1,4,3},并且arr_new中的第一个是arr中的第一个1,arr_new中的第二个1是arr中的第二个1,这是我们就说这种排序时稳定的.(2)原地排序:所谓原地排序是指,不申请多余的空间来辅助完成排序算法,而是在原来的待排序的数据之上直接进行比较

数据结构与算法系列十(排序算法概述)

1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法?

查找算法概述

本文关于排序算法概述引自<新编数据结构习题与解析>(李春葆等著)第10章. 被查找的对象是由一组记录组成的表或文件,每个记录由若干个数据项组成,并假设每个记录都有一个能唯一标识该记录的关键字. 查找的定义是:给定一个值k,在含有n个记录的表中找出关键字等于k的记录.若找到,则查找成功,返回该记录的信息或该记录在表中的位置:否则查找失败,返回相关的指示信息. 采用何种查找方法的相关因素如下: 1)使用哪种数据结构来表示“表”,即表中记录是按何种方式组织的: 2)表中关键字的次序,即对无序集合查找

基本排序之选择排序

选择排序: 概述: (1) 将0到N-1位置上最小的数与0位置处的数交换: (2) 将1到N-1 位置上最小的数与1位置处的数交换: (3)以此类推,一直到N-1位置处结束,完成排序. 算法稳定性: 不稳定算法. 时间复杂度: O(N2) 代码: #include <iostream> using namespace std; template<typename T> void SelectionSort(T array[],int length) { if (length <

八大排序算法实战:思想与实现

摘要: 所谓排序,就是根据排序码的递增或者递减顺序把数据元素依次排列起来,使一组任意排列的元素变为一组按其排序码线性有序的元素.本文将介绍八种最为经典常用的内部排序算法的基本思想与实现,包括插入排序(直接插入排序,希尔排序).选择排序(直接选择排序,堆排序).交换排序(冒泡排序,快速排序).归并排序.分配排序(基数排序),并给出各种算法的时间复杂度.空间复杂度和稳定性. 版权声明: 本文原创作者:书呆子Rico  作者博客地址:http://blog.csdn.net/justloveyou_/

一文搞定十大经典排序算法(Java实现)

本文总结十大经典排序算法及变形,并提供Java实现. 参考文章: 十大经典排序算法总结(Java语言实现) 快速排序算法—左右指针法,挖坑法,前后指针法,递归和非递归 快速排序及优化(三路划分等) 一.排序算法概述 1.定义 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序. 2.分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过比较

数据结构与算法系列十三(选择排序)

1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法?

6.2笔记

一.水仙花数 水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) 水仙花数只是自幂数的一种,严格来说三位数的3次幂数才成为水仙花数. 附:其他位数的自幂数名字 一位自幂数:独身数 两位自幂数:没有 三位自幂数:水仙花数 四位自幂数:四叶玫瑰数 五位自幂数:五角星数 六位自幂数:六合数 七位自幂数:北斗七星数 八位自幂数:八仙数 九位自幂数:九九重阳数 十位自幂数:十全十美数 二.排序 排序是计算机内经常进行