精华内容
下载资源
问答
  • 直接插入排序

    千次阅读 2017-05-07 12:02:54
    直接插入排序

            直接插入排序的基本思想:将一个记录插入到已经排好序的记录中,从而得到一个有序的,记录数增一的有序表.

            核心代码:

    public static void insertSort(int[] data){
    		for(int i=1; i<data.length; i++){
    			if(data[i]<data[i-1]){ // 如果当前数比前一个数小
    				int cur = data[i]; // 把当前数记录下来
    				int j = i - 1; // 用j来记录当前数的前一个数的下标
    				for(; j>=0&&cur<data[j]; j--){
    					data[j+1] = data[j];
    				}
    				data[++j] = cur; // j要记得++
    			}
    		}
    	}
            完整代码:

    package cn.ccnu.sort;
    
    public class Insert {
    	public static void insertSort(int[] data){
    		for(int i=1; i<data.length; i++){
    			if(data[i]<data[i-1]){ // 如果当前数比前一个数小
    				int cur = data[i]; // 把当前数记录下来
    				int j = i - 1; // 用j来记录当前数的前一个数的下标
    				for(; j>=0&&cur<data[j]; j--){
    					data[j+1] = data[j];
    				}
    				data[++j] = cur; // j要记得++
    			}
    		}
    	}
    	
    	public static void main(String[] args) {
    		int[] data = {10, 3, 12, 5, 4, 9, 4, 7, 6};
    		insertSort(data);
    		for (int i : data) {
    			System.out.print(i + "  ");
    		}
    	}
    }

    展开全文
  • 直接插入排序详解

    千次阅读 多人点赞 2020-08-13 20:59:13
    这篇博客来详解一下插入排序算法中的直接插入排序。

    上一篇博客:归并排序详解

     写在前面:大家好!我是ACfun,我的昵称来自两个单词Acceptedfun。我是一个热爱ACM的蒟蒻。这篇博客来详解一下插入排序算法中的直接插入排序后面还会整理插入排序中的折半插入排序和希尔排序。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
    用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

    插入排序简介

     插入排序是一种简单直观的排序方法,其基本思路为每次将一个待排序的元素按照其关键字大小插入到前面已经排好序的子序列中,直到全部的记录插入完成。
     由这一排序思想可以引申出三个重要的排序算法:直接插入排序、折半插入排序、希尔排序

    直接插入排序

    实现思路

    直接插入排序是一种最简单的排序方法,他的基本操作就是不断地将一个记录插入到之前已经排好序的序列中直到完成所有的排序。进行插入排序首先我们应该明确什么是监视哨。在进行插入排序的时候我们的数据是从下标为 1 的地方开始存储,下标为 0 的位置不存储数据而作为监视哨。
     监视哨 q[0] 主要有两个作用:

     1.进行查找(插入位置)循环之前,它保存了待排序数据 q[i] 的副本(q[0] = q[i]),使会因为记录后移而丢失 q[i] 的内容;
     2.监视哨 q[0] 的主要作用是:防止在查找插入位置的过程中出现数组下标越界。引入监视哨可以避免很多不必要的判断语句,从而提高程序的效率。

    明确了监视哨的作用之后,下面我们来看一下如何具体的实现插入排序:
     1. 找出待排序元素 q[i] 应该插入的位置 k;
     2.将待排序元素 q[i] 放到监视哨的位置 即使 q[0] = q[i];
     3.将 k 到 i 位置的元素依次向后移动一个位置;
     4.将监视哨 q[0] 的数据复制到数据应该插入的位置 q[k];
    插入排序图解

    实现代码

    #include<iostream>
    using namespace std;
    
    const int N = 1e5 + 10;
    int q[N];
    
    int main() {
    	int n;
    	cin >> n;
    	for (int i = 1; i <= n; i++) cin >> q[i];
    	
    	// 依次将 2 ~ n 插入到前面已经排好序的序列中 
    	for (int i = 2; i <= n; i++) {
    		if (q[i] < q[i - 1]) {
    			// 加一个判断条件判断一下待排数据是否需要进行比较 
    			q[0] = q[i];    // 将待插入数据放到监视哨的位置 
    			int j; 
    			for (j = i - 1; q[0] < q[j]; j--) {
    				// 将数据依次向后移动,找到待排数据应该插入的位置 
    				q[j + 1] = q[j];
    			}
    			q[j + 1] = q[0];    // 将数据插入到应该插入的位置 
    		}
    	}
    	
    	// 输出结果 
    	for (int i = 1; i <= n; i++) cout << q[i] << " ";
    	
    	return 0;
    	
    }
    

    未完待续,持续更新中……
    冲鸭!

    展开全文
  • 直接插入排序算法——C/C++

    万次阅读 多人点赞 2019-06-11 23:16:00
    直接插入排序 1、插入排序(Insertion-Sort)的基本思想: 每次将一个待排序的数据按照大小插入到前面已经排好序的适当位置,直到全部数据插入完成为止。 2、插入排序的步骤: 2.1、建立一个哨兵(即临时变量),把...

    直接插入排序

    1. 插入排序(Insertion-Sort)

    每次将一个待排序的数据按照大小插入到前面已经排好序的适当位置,直到全部数据插入完成为止。

    2. 插入排序的步骤

    2.1、建立一个哨兵(即临时变量),把要插入的数据赋给它。
    2.2、插入数据从后面开始比较,如果大于前面的就记录下标,并将数据后移,直到插入数据碰到比它小的。
    2.3、将临时变量赋值给当前记录下标。
    2.4for循环即完成全部数据插入。
    

    3. 插入排序动图演示

    在这里插入图片描述

    4. 完整代码

    #include <stdio.h>
    
    void display(int array[], int size) {
        for (int i = 0; i < size; i++) {
            printf("%d ", array[i]);
        }
        printf("\n");
    }
    
    void InsertSort(int array[], int size) {
        for (int i = 1; i < size; i++) {        // 第 1 个数肯定是有序的,从第 2 个数开始遍历,依次插入有序序列
            int temp = array[i];                // 取出第 i 个数,和前 i-1 个数比较后,插入合适位置
            int j    = i - 1;                   // 因为前 i-1 个数都是从小到大的有序序列,所以只要当前比较的数 (array[j]) 比 temp 大,就把这个数后移一位
            while (j >= 0 && array[j] > temp) { // 当 j < 0 或 array[j] < temp(array[i]) 时终止
                array[j + 1] = array[j];        // 将大于 temp(array[i]) 的数据后移
                j--;                            // 向前比较
            }                                   // 结束循环
            array[j + 1] = temp;                // array[i]插入到正确的位置上
    
            //打印每次排序结果
            display(array, size);
        }
    }
    
    int main() {
        int array[] = {49, 38, 65, 97, 76, 13, 27, 49, 10};
        int size    = sizeof(array) / sizeof(int);
    
        //打印原始数据
        printf("%d \n", size);
        display(array, size);
        InsertSort(array, size);
        return 0;
    }
    

    5. 结果展示

    (显示每一次插入信息)
    在这里插入图片描述

    6. 算法分析

    时间复杂度:平均O(n^2),最好O(n), 最坏O(n^2)
    空间复杂度:O(1)
    稳定性:稳定

    展开全文
  • 插入排序之直接插入排序

    千次阅读 2018-12-04 17:29:27
    插入排序之直接插入排序

    个人博客:https://suveng.github.io/blog/​​​​​​​
    title: 插入排序之直接插入排序
    date: 2018-12-01 19:00:00 +0800
    update: 2018-12-01 19:00:00 +0800
    author: suveng
    tags:

    • 算法
      preview: 插入排序之直接插入排序


    封面图

    插入排序之直接插入排序

    原理

    1. 列表第一个元素和前面元素比较,如果小于前面元素(其实不存在),则交换位置。(这步其实可以没有)
    2. 列表第二个元素和前面元素(第一个元素)比较,如果小于前面元素,则交换位置。
    3. 列表第三个元素和前面元素(第二个元素)比较,如果小于前面元素,则交换位置。如果和前面元素交换了位置,现在在第二个位置上,则接着继续和前面元素比较(第一个元素),如果小于前面元素,接着再次交换位置,然后再次重复比较过程…
    4. 继续重复以上过程,直到最后一个元素完成比较

    演示

    时间复杂度

    最坏时间复杂度 最优时间复杂度 平均时间复杂度
    O(n^2) O(n) O(n^2)

    空间复杂度

    O(1)

    稳定性

    稳定

    **稳定性定义:**排序前后两个相等的数相对位置不变,则算法稳定。

    算法实现

    Java

    class InsertionSort {
    	public static void main(String[] args) {
    		System.out.println("hello,直接插入排序");
    		InsertSort is=new InsertSort();
    		int[] des=is.directInsertSort(new int[]{72,78,42,60,84,74,60,79,72,52});
    		for(int i=0;i<des.length;i++){
    			System.out.println(" "+des[i]);
    		}
    		System.out.println();
    	}
    	
    	public int[] directInsertSort(int[] source){
    		int n=source.length;
    		//可以直接从第二个元素开始
    		for(int i=1;i<n;i++){
    			for(int j=i;j>0;j--){
    				if(source[j]<source[j-1]){
    					//异或法 交换变量,减少临时变量
    					source[j]=source[j]^source[j-1];
    					source[j-1]=source[j]^source[j-1];
    					source[j]=source[j]^source[j-1];
    				}
    			}
    		}
    		return source;
    	}
    }
    
    展开全文
  • 直接插入排序python实现

    千次阅读 2019-05-01 12:00:33
    直接插入排序python实现 算法思想 直接插入排序的算法思想在于:每一步将一个待排序的数字,插入到前面已经排好序的有序序列中去;重复上述插入数字操作,直到插完所有元素为止,此时序列已经全部排列完毕。 将直接...
  • 易语言直接插入排序

    千次阅读 2020-05-27 10:33:56
    直接插入排序,整个排序的过程为 n-1 趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第二个记录开始,逐个进行插入,直至整个序列变成有序。(如果待插入的元素与有序序列中的某个元素相等,则将待插入...
  • 排序算法之直接插入排序

    万次阅读 多人点赞 2018-05-14 21:00:23
    1. 插入排序概念 插入排序的基本方法是:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当...2. 直接插入排序基本思想 直接插入插排的基本思想是:当插入第i(i &gt;= 1)时...
  • java直接插入排序

    千次阅读 2018-09-02 11:06:43
    直接插入排序,有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加...
  • C语言直接插入排序

    千次阅读 多人点赞 2019-03-13 10:26:29
    直接插入排序(稳定算法)的基本思想:从第一个数开始,认定数组的前i个数有序,依次遍历数组,把后面的数据插入到合适的位置,使数组继续保持有序。 #include &lt;stdio.h&gt; void Swap(int* a, int* b...
  • 73-插入排序——直接插入排序

    千次阅读 多人点赞 2018-08-16 16:24:25
    1. 插入排序   插入排序的基本思想:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子表中的适当位置,直到全部记录插入完成为止。 2. 直接插入排序 ...图1-直接插入排序...
  • 排序一:直接插入排序

    千次阅读 2017-07-13 21:29:12
    直接插入排序
  • C++直接插入排序

    千次阅读 2020-11-06 00:07:53
    直接插入排序在排序中较为简单: 在上面数组中,长度为5,而直接插入排序的思想就是: 在第一遍的时候,第i-1个到前面的都为有序的数组(所以i的位置应该从下标1开始) 而此时的第i个元素就是要排序,由于前i-1个...
  • 折半直接插入排序

    千次阅读 2020-04-14 11:12:28
    折半直接插入排序: 分析: 二分查找法:折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的 中点位置为比较对象, 如果要找的元素值小于该...
  • 单链表的直接插入排序

    千次阅读 2018-05-21 22:07:36
    单链表的直接插入排序 1、数组的直接插入排序 void InsertSort(int *a, int len) { for (int i = 1; i &amp;lt; len; ++i) { for (int j = 0; j &amp;lt; i; ++j) { if (a[j]&amp;gt;a[i]) { ....
  • 直接插入排序及其优化

    千次阅读 2017-10-09 20:22:49
    直接插入直接插入排序是一种最简单的排序方法,基本操作就是将一个记录插到已排序的序列中,从而得到一个新的序列。 就类似于我们平时生活中的打扑克牌,你起手拿到一张牌,然后接下来每拿到一张牌后,比它大则插在...
  • 直接插入排序(C语言)

    千次阅读 2020-06-05 14:08:38
    直接插入排序 1.排序原理 当我们打扑克牌的时候,为了使手中的牌顺序排列,我们平常都会这么做,每抽到一张牌,就会将它直接插入到适当的位置,也就是直接插入排序。 例如:我们手上有1、3、4、5这四张牌,而当我们...
  • 插入排序有两种,直接插入排序是其中一种,也是基本的一种,另一种是shell排序也称希尔排序。冒泡排序是交换排序的一种,下面讲述冒泡排序和直接插入排序这两种排序算法的异同。 冒泡排序是众多排序算法中最易于...
  • 单链表 -- 直接插入排序

    万次阅读 多人点赞 2018-05-29 22:52:47
    单链表 – 直接插入排序 直接插入排序就是: 先从待排序的元素中取出第一个元素。 取出的这个第一个元素当作有序区的第一个元素。 接着从待排序的元素中取出第二个元素。 然后将第二个元素插入到...
  • C++实现直接插入排序

    千次阅读 2018-08-17 10:49:58
    直接插入排序算法思想: 将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录加1的有序表。 举例说明: 例如对于{5,3,4,6,2}的序列: 第一步从记录为1出发,记录为1的关键字为3,3比5(记录为1-1...
  • 用Python实现直接插入排序

    千次阅读 2018-10-22 19:09:53
    1.直接插入排序  直接插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。    2.算法步骤,如下图所示 1)将第一待...
  • 排序(一)直接插入排序

    千次阅读 2018-10-29 17:19:57
    本节主要简单介绍一下直接插入排序算法,直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。摘自百度百科。...
  • 单链表排序之直接插入排序

    万次阅读 多人点赞 2016-06-07 20:28:34
    ****单链表排序之直接插入排序**** /*前段时间刚学会几种排序方法,最近学习了单链表,就用来试试,本篇链表的排序方法讲述的是单链表的直接插入排序;(注意:请仔细看准节点结构体的包装和头指针的包装...
  • 实现直接插入排序算法

    千次阅读 2019-02-14 10:43:21
    * 实现直接插入排序算法 * 实验目的: * 领会直接插入排序的过程和算法设计 * 实验内容: * 设计程序,实现直接插入排序算法。用相关数据进行测试,并 * 输出各趟的排序结果。 */ #include &lt;stdio.h&gt; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,302,732
精华内容 521,092
关键字:

直接插入