8大排序之-----(一)插入排序与时间复杂度
来源:互联网 发布:jenkins 修改端口号 编辑:程序博客网 时间:2024/06/06 19:51
(一)什么是插入排序呢?
插入排序就是每次把待排序的数据一个数据插入到已经排好序的正确位置。就好比,你左手拿着扑克牌,用右手去取牌的时候,把取到的牌放到左手正确的位置。
比如我们要排序4,3,5,7,6,2,1,9,88,0。
(1)我们先假设下标为0的数据是排好的,即4是排好序的
那么接下来就要3,5,7,6,2,1,88,0.中每次取出一位放到数组的正确位置。
(2)取3的时候,3< 4,所以3放到4的前面
(3)取5的时候,5>4,所以放到4后面
(4)取7的时候,7>5,所以7放到5后面
(5)取6的时候,5<6<7,所以6放到7的前面,5的后面
(6)取2的时候,2比(7,6,5,4,3)都小,所以放到3前面
(7)取1的时候,1比(7,6,5,4,3,2)都小,所以放到2前面
以此类推,剩下的两个就不画图了
(二)代码如下:
public class ChaRu {public static void main(String args[]) {int a [] = {4,3,5,7,6,2,1,9,88,0};sort(a); System.out.print("结果为"+ a[0]+","+a[1]+","+a[2]+","+a[3]+","+a[4]+","+a[5]+","+a[6]+","+a[7]+","+a[8]+","+a[9]);}public static void sort(int s []){int start = 1;//index = 0 的默认排好了的。//i代表初始吭位置 - 趟数for(int i = start; i<s.length; i++){//设定数组的第一个元素是排序好的int j = i;int temp = s[i];//把s[i]赋给中间变量,相当于把s[i]挖空,等找到合适的元素再把元素插入这个位置while(j > 0 && s[j-1] > temp){// r如果元素比中间值大,则移动位置 s[j] = s[j-1]; j--;//不断和排好序的元素比较, 此时的坑index}s[j] = temp;//每次循环后把坑填好} //System.out.print("结果为"+ s);}}
(三)现在来分析一下插入排序的时间复杂度:
在最坏情况下,数组完全逆序,插入第2个元素时要考察前1个元素,插入第3个元素时,要考虑前2个元素,……,插入第N个元素,要考虑前 N - 1 个元素。因此,最坏情况下的比较次数是 1 + 2 + 3 + ... + (N - 1),等差数列求和,结果为 N^2 / 2,所以最坏情况下的复杂度为 O(N^2)。
最好情况下,数组已经是有序的,每插入一个元素,只需要考查前一个元素,因此最好情况下,插入排序的时间复杂度为O(N)
2 0
- 8大排序之-----(一)插入排序与时间复杂度
- 8大排序之----快速排序与时间复杂度
- 8大排序之-------堆排序与时间复杂度
- 8大排序之 ---------归并排序 与时间复杂度
- 8大排序之 -------冒泡排序 与时间复杂度
- 8大排序之-----(3)选择排序与时间复杂度
- 8大排序之(五)------简单理解 基数排序 与时间复杂度
- 排序与时间复杂度
- 排序算法之 插入排序、希尔(shell)排序 及其时间复杂度和空间复杂度
- 时间复杂度与排序算法
- 排序算法时间复杂度与空间复杂度
- 插入排序的时间复杂度而
- 插入排序的时间复杂度分析
- 插入排序和时间复杂度下界
- MIT算法导论-插入排序与归并排序及时间复杂度计算
- 插入排序和归并排序实现以及时间复杂度分析
- 排序算法、时间复杂度与信息熵
- 排序算法的时间复杂度与稳定性
- 改变eclipse的快捷键
- configure: error: in `/usr/local/src/php-5.6.9':
- TCP的三次握手和四次挥手
- Java构造和解析Json数据的两种方法详解一
- 下载地址
- 8大排序之-----(一)插入排序与时间复杂度
- OpenCV人脸识别facerec
- 这道题目其实很容易,刚刚开始的时候,我不知道连续是怎么证明的,到了最后,我看了答案,首先求出在该点的值,然后再求出趋于改点的值
- IPC通信:Posix共享内存1
- Java中类的实例化方式
- 音视频之路之开篇——视音频编解码技术零基础学习方法
- C++宏定义详解
- 关于TexturePacker的使用
- js实现百度搜索