排序算法的学习笔记(持续更新)

排序算法的学习笔记

排序:它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。

稳定性:两个数k1=k2,在排序前k1的位置比k2靠前,在排序后k1的位置依然比k2靠前,则称所用的排序方法是稳定的,反之,则称所用的排序方法是不稳定的。

内部/外部排序:由于待排序的记录数量不同,使得排序过程中涉及的存储器不同,可将排序方法分为两大类:内部排序和外部排序。内部排序指的是待排序记录存放在计算机随机存储器中进行排序过程;外部排序指的是记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。

 

内部排序:

按不同原则可分为:插入排序,交换排序,选择排序,归并排序,和计数排序

按工作量可分为:简单的排序方法-O(n2),先进的排序方法-O(nlogn),基数排序-O(d·n)

 

各个排序算法:

 

一、插入排序:

1、直接插入排序

将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。

算法思想白话文:直接插入排序应该是我们人工做排序的时候最常用的方法。想象一个场景,你面对一对乱序的数据,你会怎么排序。我想大都人都是如下:先拿出两个数,比较一下,按序排好。接着拿第三个数,看他应该插入刚刚排好的序列的那里。前中后。然后继续拿第三,四,第N个数,拿完了数,也就搞定了排序。而这也就是直接插入排序的基本思想了。

 

2、希尔排序

       希尔排序是对直接插入排序的改进。先将整个待排序的序列分割成多干子序列,分别进行直接插入排序,待整个序列中的序列“基本有序”时,再对全体记录进行一次直接插入排序。

       算法思想白话文:从代码来理解,直接插入排序是一次行对序列[1…N]进行排序。而希尔排序不然,而是根据一个增量序列[dk1,dk2,dk3,1],这个增量序列最后一个必须是1,保证最后一次是一次直接插入排序。然后每一次迭代,便是对如下多个子序列进行排序,比如第1次:[1,1+dk1,1+2dk,1+3dk,…]、[2,2+dk1,2+2dk1,2+3dk1,…]…,然而感觉并没什么特别大的改进。

 

3、冒泡排序

       冒泡排序是一个理解很简单的排序算法。首先将第一个记录与第二个记录进行比较。将较小的一方放在前面,然后对第二第三进行比较,第三第四进行比较,一直到最后,这样可以确保,最后一个记录为最大的。然后进行第二趟,这次一直比较到倒数第二。然后继续迭代。迭代进行到全部比较完,或者某一次比较已经没有发生交换了,那么停止。

       代码的实现是从后面比较,将思想逆转过来,这样是确保每次最小的上升,符合冒泡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值