排序算法概述

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

快速排序

算法思想:快速排序时这样的一种排序,选取数组中的第一个元素arr[0]作为依据,遍历一遍数组后,使得数组中的第一个元素进入正确的位置,即在该位置左面的元素均小于等于arr[0],在该位置右面的元素均大于等于arr[0]。然后,在对该位置左面和右面的元素分别进行快速排序,如此一来完成整个数组的排序。

冒泡排序

算法原理:冒泡排序是经过n-1趟子排序完成的,第 i 趟子排序从第1个数至第 n-i+1 个数,若第 i 个数比第 i+1 个数大,则交换这两个数,实际上这样经过 i 次子排序就使得 第1个数至第 n-i +1个数之间最大的数交换到了n-i+1 的位置上了。实际上冒泡排序时可以优化的,那就是当第 i 次子排序并没有发生元素的交换时,就说明数组已经排好序了,以后的子排序就不用做了。

选择排序

算法原理:所谓选择排序经过 n-1 次选择,当进行第 i 次选择时,是从第1个元素到第 n-i+1 的元素中选择最大的元素和第 n-i+1 个位置的元素交换,这样做比如第1 次选择使得最大的元素到了数组的最后一个位置。注意哦,在选择排序中每次选择时只进行一次数据的交换。

插入排序

算法原理:将待排序的数组分为:有序区 和 无序区。然后每次从无序区取出第一个数据插入到有序区的正确位置,最终完成排序。

堆排序

算法思路:所谓的堆排序是利用完全二叉树的思想实现的。首先应该提到的是最大堆,在最大堆中(完全二叉树二叉树)中每个父节点都大于等于两个儿子节点的值,这时候很明 显堆顶是元素的最大值,然后把堆顶元素和堆中最后一个元素(分层遍历的节点编号最大的元素)交换,这样最大值就落到了数组的arr[n-1]的位置,然后 把前n-1元素继续按照上面的方式处理,如此进行n-1次就完成堆排序。

归并排序

算法原理:归并排序的思想是分治,将一个带排序的数组分成两个较小的数组,然后分别进行排序,组后将两个排好序 的较小的数组合并起来,就得到了原来数组的排序后的结果。应该注意的是这种将两个排好序的数组合并有一个较好的算法,时间复杂度是O(n1+n2)的。 n1、n2分别是两个小数组的长度。

时间: 2024-11-15 11:21:41

排序算法概述的相关文章

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

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

排序算法--概述和参考

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

查找算法概述

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

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

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

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

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

#排序算法#【1】概述、冒泡排序、选择排序

排序算法分类: 内部排序(在排序过程中不需要访问外存就可以完成排序) 外部排序 内部排序分类: 交换排序 冒泡排序 快速排序 选择排序 直接选择排序 堆排序 插入排序 直接插入排序 希尔排序 合并排序 外部排序: 常见的是多路归并算法,即将原文件分为多个能够一次装入内存一部分,分别把每一部分调入内存完成排序,然后对已经排序的子文件进行归并排序 冒泡排序法: 冒泡排序法是一种相邻数据交换的排序方法. 冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序

排序算法(一):概述

排序算法(一):概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(或记录)经过排序操作后,就可以把他们变成一组按关键字排序的有序队列. 对于排序算法从以下几点去衡量算法的优劣: 时间复杂度,所谓时间复杂度就是将一组数从无序到有序所花费的时间,通常使用一个量级去衡量,比如O(n) 或者 O(n*n) 空间复杂度,所谓空间复杂度就是在排序过程中使用辅助空间的大小,通常也是使用一个量级去衡量,比如O(n) 或者 O(n*n) 是否稳定,所谓排序算法是否稳定的定义是对于相等的两个元素,在排

八大排序算法

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

泛型算法概述

顺序容器只定义了很少的操作:在多数情况下,我们可以添加和删除元素.访问首尾元素.确定容器是否为空以及获得指向首元素或尾元素之后位置的迭代器. 如果我们想要做:查找特定元素.替换或删除一个特定值.重排元素顺序等.标准库并未给每个容器都定义成员函数来实现这些操作,而是定义了一组泛型算法:称它们为“算法”,是因为它们实现了一些经典算法的公共接口,如排序和搜索:称它们是“泛型的”,是因为它们可用于不同类型的元素和多种容器类型(不仅包括标准库类型,如vector或list,还包括内置的数组类型). 概述