【数据结构】——排序算法——1.1、直接插入排序

插入算法很多,无论是在内功修炼,各种笔试面试都是相当有用的。接下来,将陆续将各种排序算法进行练习:

主要分为以下几个部分(其他后面学习补充):

一、插入类排序:1、直接插入排序;2、折半插入排序;3、希尔shell排序;

二、交换类排序:1、冒泡排序 ;2、快速排序;

三、选择类排序:1、简单选择; 2、堆排序;

本人多使用Java——开始吧!

首先推荐1、维基百科《排序算法》词条,图文并茂,很形象!2、学习博文《维基百科上的算法和数据结构链接很强大》,资料很多,保存学习!

【数据结构】——排序算法——1.1、直接插入排序

一、先上维基的图:

图一、插入排序例子

分类 排序算法
数据结构 数组
最差时间复杂度
最优时间复杂度
平均时间复杂度
最差空间复杂度 总共 ,需要辅助空间

二、描述

很简单,类似打扑克牌时按从小到大排。每次派牌的人发一张,就拿上来整理一下。拿起新派的牌,第一件事,便是看牌的大小,然后从手里整理好的牌按从大到小(或者从小到大)的方向查询。当找到一个位置同时满足一边大于等于新牌、而另外一边小于等于新牌,那就将新牌插入这个位置。重复,最后牌就排好序了!

三、Java程序

public class Insertion {
    public static void insertionSort(Comparable []data) {
        for(int index = 1; index < data.length; index++) {
            Comparable key = data[index];
            int position = index;
            //shift larger values to the right
            while (position > 0 && data[position - 1].compareTo(key) > 0) {
                data[position] = data[position - 1];
                position--;
            }
            data[position] = key;
        }
    }
    public static void main(String []args) {
        Comparable []c = {4, 9, 23, 1, 45, 27, 5, 2};
        insertionSort(c);
        for(int i = 0; i < c.length; i++)
            System.out.println("插入排序:" + c[i]);
    }
}
时间: 2024-08-28 08:09:36

【数据结构】——排序算法——1.1、直接插入排序的相关文章

排序算法《3》插入排序

算法实现: 使用插入排序将下面的数字按照从小到大的顺序排列 2 9 5 4 8 1 6 步骤1:数组中已经排好的是{1},将9插入数组中 步骤2:数组中已经排好的是{2,9},将5插入数组中 步骤3:数组中已经排好的是{2,5,9},将4插入数组中 步骤4:数组中已经排好的是{2,4,,5,9},将8插入数组中 步骤5:数组中已经排好的是{2,4,,5,8,9},将1插入数组中 步骤6:数组中已经排好的是{1,2,4,,5,8,9},将6插入数组中 步骤7:排序完成 1 2 4 5 6 8 9

常见排序算法实现(直接插入排序,冒泡排序,快速排序,建大选择排序)

常见的排序算法实现(直接插入排序,冒泡排序,快速排序,建大选择排序),还有几个下次写上. #include "stdio.h" #include "stdlib.h" #include "malloc.h" #include <iostream> using namespace std; #define N 10 void showArr(int a[]); void InsertSort(int a[]);    //直接插入排序

黑马程序员——数据结构排序算法总结

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 下面是几个网上常见的总结图: 有些不同之处:集中在希尔排序的时间复杂度.快速归并的空间复杂度上 个人总结口诀: 选择N方-->选择排序的最好最坏平均都N方 插入冒泡最好N-->插入冒泡的最好是N,其他是N方 归并堆n乘logN-->归并希尔堆的最好最坏平均都是n乘logN 快速最坏N方-->快速排序的最坏是N方,其他是n乘logN 快速选择希尔堆不稳定-->

八大排序算法学习笔记:插入排序(一)

插入排序     包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序).属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置) . 直接插入排序: 1.算法的伪代码(这样便于理解):     INSERTION-SORT (A, n)             A[1 . . n] for j ←2 to n do key ← A[ j] i ← j – 1 while i > 0 and A[i] > key do A[i+1] ← A[i]

八大排序算法学习笔记:插入排序(二分插入排序)

二分插入排序   也称折半插入排序, 1.基本思想:设数列[0....n]分为两部分一部分是[0...i]为有序序列,另一部分是[i+1.....n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 x 在有序序列中的插入位置并插入,有序序列还是有序的,接下来重复上述步骤,直到无序序列全部插入有序序列 ,这是整个序列只剩下有序序列即有序了. 2.代码:    3.复杂度: 用二分插入排序所要进行的总比较次数为O(lgn),当n较大时,比直接插入排序的最大比较次数小得多,但大于最小比较

数据结构排序算法Java实现

闲的无聊又拿起了大学的数据结构的书看起来 <数据结构(c语言版)>严蔚敏 吴伟民编著. 里面有几个排序算法,感觉挺好玩的,就想着写出来玩玩. package test.sort; /** * @Title: TODO * @Description: TODO * @author: * @date: 2014-8-10 上午11:20:43 * */ public class quickSort { private static int datas[] = {23,42,12,45,56,63,

复习数据结构:排序算法(一)——插入排序

从这一篇开始,计划复习一下数据结构的基本知识.一来是为了开年之后的找工作,二来是为了想提升自己的编程能力.由于这些数据结构知识点,之前都学习过,这里我们就提炼出每个知识点的核心,以及代码实现. 这篇先说排序算法中的插入排序. 插入排序是一种稳定排序算法,属于内排序.适合少量数据量的排序. 当输入数组已经排好序时,插入排序需要O(n),快排需要O(n^2). 当输入数组倒序排列时,插入排序时复为:O(n^2). 平均时间复杂度:O(n^2). 代码实现如下: #include<iostream>

数据结构——排序算法总结

排序(Sorting)就是将一组对象依照规定的次序又一次排列的过程,排序往往是为检索而服务的.它是数据处理中一种非常重要也非经常常使用的运算.比如我们日常学习中的查字典或者书籍的文件夹.这些都事先为我们排好序,因此大大减少了我们的检索时间,提高工作效率. 排序可分为两大类: 内部排序(Internal Sorting):待排序的记录所有存放在计算机内存中进行的排序过程: 外部排序(External Sorting):待排序的记录数量非常大,内存不能存储所有记录.须要对外存进行訪问的排序过程. 外

数据结构-排序算法总结

排序算法 算法分析 算法稳定性 如果一种排序算法不会改变关键码值相同的记录的相对顺序,则称为稳定的(stable) 不稳定的算法在某种条件下可以变为稳定的算法,而稳定的算法在某种条件下也可以变为不稳定的算法.例如,对于冒泡排序算法,原本是稳定的排序算法,如果将记录交换的条件改成a[j].key>=a[j+1].key,则两个相等的记录就会交换位置.再如,快速排序原本是不稳定的排序方法,但若待排序记录中只有一组具有相同关键码的记录,而选择的轴值恰好是这组相同关键码中的一个,此时的快速排序就是稳定的

排序算法(三)插入排序

1.基本思想 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入. 插入排序非常类似于整扑克牌,在开始摸牌时,左手是空的,牌面朝下放在桌上.接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上.为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较.无论什么时候,左手中的牌都是排好序的. 如果输入数组已经是排好序的话,插入排序出现最佳情况,其运行时间是输入规模的一个线性函数.如果输入数组是逆序排列的,将出现最坏情况.平均情况与最坏情况一样,其