初级排序算法(选择排序、插入排序、希尔排序)
来源:互联网 发布:杜应流 知乎 编辑:程序博客网 时间:2024/05/16 05:41
选择排序
1.定义:首先,找到数组中的最小的那个元素,其次,将他和数组中的第一个元素交换位置。再次,在剩下的元素中找到最小的元素,将它和数组中第二个元素交换位置。如此反复,知道将整个数组排序。这种方法叫做选择排序(因为它在不断的选择剩余元素中的最小者)。
2.算法的时间效率取决于比较的次数。长度为N的数组,选择排序大约需要N^2/2次比较和N次交换。
(N-1)+(N-2)+。。。+2+1=N(N-1)/2~N^2/2
3.特点:A.运行时间和输入无关。(一个已经有序的数组和随机的数组所用时间一样)
B.数据移动是最少的。
4.代码如下:
插入排序
1.定义:通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。计算机中为了给要插入的元素腾出空间,我们需要把其余的所有的元素在插入之前都向右移动一位。这种算法叫做插入排序。
2.插入排序所需的时间取决于输入元素的初始顺序。(对一个很大且其中元素有序的数组进行排序比随机顺序的数组或者逆序的数组要快的多)
对于随机排列的长度N且主键不重复的数组,平均情况插入排序需要~N^2/4次比较和N^2/4次交换。
最坏情况:~N^2/2次比较和N^2/2次交换
最好情况:N-1次比较和0次交换
3.代码如下:
4.一般情况是部分有序数组:
A.数组中每个元素距离它的最终位置都不远
B.一个有序大数组接一个小数组
C.数组中只有几个元素位置不正确
希尔排序
1.定义:一种基于插入排序的快速的排序算法。希尔排序为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序将局部有序的数字排序。思想:使数组中任意间隔为h的元素都是有序的。这样的数组被称为h有序数组。
2.希尔排序更高效的原因是它权衡了子数组的规模和有序性。排序之初,各个子数组都很短,排序之后子数组都是部分有序的,这两种情况都很适合插入排序
3.代码如下:
- 初级排序算法(选择排序、插入排序、希尔排序)
- 初级排序算法(选择排序+插入排序+希尔排序)动态可视化实现
- 五、排序算法(选择排序、插入排序、希尔排序)
- 初级排序-选择排序、插入排序、希尔排序总结
- 排序算法(1):插入排序,选择排序,希尔排序,堆排序
- 常用的排序算法:插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序
- 基本排序算法(选择、插入、冒泡)和希尔排序
- 初级排序算法(选择、插入、Shell)
- 初级排序方法——选择、插入、希尔排序
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序,堆排序)
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序,堆排序)
- 常见比较排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- Java实现选择排序、插入排序、希尔排序算法
- 算法 —— 选择排序,插入排序,希尔排序
- 排序算法实例(冒泡法排序、选择法排序、直接插入排序 、希尔法排序、折半插入排序)
- 初级排序算法(选择、插入、冒泡排序)
- 选择排序、插入排序、希尔排序
- 选择排序&插入排序&希尔排序
- ubuntu修改IP地址和网关的方法
- 基于行为树与状态机的游戏人工智能
- SOA学习笔记
- 【屌丝学习笔记】第二天 JAVA基础
- 详细讲解Oracle中isnumeric的三种实现
- 初级排序算法(选择排序、插入排序、希尔排序)
- poj 3204 最大流
- Java多线程之CyclicBarrier
- Goautodial 常见问题(一)
- 设计模式-代理模式
- NeHe_OpenGL_第九课 3D空间中移动图像
- 将int转为string类及将string类转为int类
- MySQL报错:The MySQL server is running with the --skip-grant-tables option so it cannot execute this st
- Java多线程之CountDownLatch