美文网首页程序员
直接插入排序(JAVA)

直接插入排序(JAVA)

作者: 林天涯 | 来源:发表于2018-01-01 09:13 被阅读0次

前言


  本文集将用java语言实现包括插入排序(直接插入、折半插入、希尔排序),交换排序(快速排序和冒泡排序),选择排序,堆排序,归并排序以及基数排序在内的所有内排序算法。虽然都很简单且实际开发几乎已运用不到(Arrays.Sort和Collection.Sort可直接调用),但是这些属于一个程序员的基本功,熟稔掌握是必须的。

算法


  直接插入排序的思想就是当发现序列不是有序的情况下时,将待排序元素插入到前面已经有序的序列中。所以怎么插是核心问题,其实归根结底还是找到待排序元素的插入位置。由于是从小到大排序,可由待排序元素的前一个位置开始从后向前比较,若发现比较元素大于待排序元素,则将比较元素向后移位以腾出位置。最终将元素赋值给排序结束腾出的位置。
  边比较边移位是其特点,所以有待优化的地方。后续的折半插入和希尔排序都是对直接插入排序的一种优化。时间复杂度为o(n*n)。

例子


以序列 4 3 1 2 5为例


示例

Codes


package com.fairy.InnerSort;

import java.util.Scanner;

/**
 * 直接插入排序
 * @author Fairy2016
 *
 */
public class DirectInsertSort {
    
    public static void sort(int a[], int n) {
        int i,j;
        for(i = 2; i <= n; i++) {
            if(a[i-1] > a[i]) {
                a[0] = a[i];//a[0]作为探针,既存储待排序元素又作循环停止标志,省却if判断
                for(j = i-1; a[j] > a[0]; j--) {
                    a[j+1] = a[j];//遇到比a[i]大的向后移位,腾出位置
                }
                a[j+1] = a[0];//将待排序元素赋值到最终位置
            }
        }
    }
    
    public static void Print(int a[], int n) {
        for(int i = 1; i <= n; i++) {
            System.out.print(a[i]+" ");
        }
    }

    public static void main(String args[]) {
        int n;
        int a[];
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()) {
            n = scanner.nextInt();
            if(n > 0) {
                a = new int[n+1];
                for(int i=1; i <= n; i++) {
                    a[i] = scanner.nextInt();
                }
                sort(a, n);
                Print(a, n);
            }
        }
    }
}

相关文章

  • 直接插入排序(java)

    扑克牌是我们几乎每个人都可能玩过的游戏。最基本的扑克玩法都是一边摸牌,一边理牌。假如我们拿到了这样一手牌,如图9-...

  • 直接插入排序(JAVA)

    前言   本文集将用java语言实现包括插入排序(直接插入、折半插入、希尔排序),交换排序(快速排序和冒泡排序),...

  • 直接插入排序:(java)

    将一个记录插入到已经排序好的有序表中,从而得到一个新的有序表。可先将第一个数字作为初始的有序表,再将剩余的数次插入...

  • Java——直接插入排序

    直接插入排序是一种最简单的排序算法,在后续我会继续发布其他的简单排序;直接插入的算法基本思想是:仅有一个元素的序列...

  • Java 直接插入排序

    经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。 将第一个数和第二个数排序,然后构成一个有序序列 将...

  • 直接插入排序-Java

    概念: 直接插入排序是将一条记录插入到已排好序的有序列表中,从而得到一个新的、记录数量增1的有序列表 算法步骤: ...

  • java快速学习排序---插入排序

    1.java实现插入排序 (1)、图解插入排序 (2)、插入排序的思想 (3)、插入排序的代码实现

  • 熟记代码片段

    1.转自 一遍记住Java常用的八种排序算法与代码实现 直接插入排序:

  • 插入排序

    一、直接插入排序 二、折半插入排序

  • 【数据结构】【C#】013-插入类排序:🥇直接插入排序(稳定)

    插入排序:直接插入排序(稳定) 【 算法思想 】 直接插入排序是一种最基本的插入排序方法,其基本操作是将第 i 个...

网友评论

    本文标题:直接插入排序(JAVA)

    本文链接:https://www.haomeiwen.com/subject/sywzgxtx.html