zoukankan      html  css  js  c++  java
  • Java基础知识强化54:经典排序之插入排序(InsertSort)

    1. 插入排序原理图:

    算法步骤

    1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

    2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。

    2. 插入排序的代码实现:

     1 package cn.itcast;
     2 
     3 /*
     4  * 插入排序基本思想
     5  * 将n个元素的数列分为已有序和无序两个部分,如插入排序过程示例下所示:   
     6  * {{a1},{a2,a3,a4,…,an}}   
     7  * {{a1,a2},{a3,a4 …,an}}  
     8  * {{a1(n-1),a2(n-1) ,…},{an(n-1)}}   
     9  * 每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,
    10  * 找出插入位置,将该元素插入到有序数列的合适位置中。
    11  */
    12 public class InsertSort {
    13     public static void sort(int[] data) {
    14         for (int i = 1; i < data.length; i++) {
    15             for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {
    16                 swap(data, j, j - 1);
    17             }
    18         }
    19 
    20     }
    21 
    22 /*
    23      * 交换数组中的两个元素
    24      */
    25     public static void swap(int[] data, int i, int j) {
    26         int temp = data[i];
    27         data[i] = data[j];
    28         data[j] = temp;
    29     }
    30 }

    3. 插入排序的示例代码,如下:

     1 /* package whatever; // don't place package name! */
     2  
     3 import java.util.*;
     4 import java.lang.*;
     5 import java.io.*;
     6  
     7 /* Name of the class has to be "Main" only if the class is public. */
     8 class Ideone
     9 {
    10     public static void main (String[] args) throws java.lang.Exception
    11     {
    12         int[] array = new int[] {12, 33, 4, 15, 25, 55, 18};
    13  
    14         sort(array);
    15         printArray(array);
    16     }
    17  
    18     public static void sort(int[] data) {
    19         for (int i = 1; i < data.length; i++) {
    20             for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {
    21                 swap(data, j, j - 1);
    22             }
    23         }
    24  
    25     }
    26  
    27      public static void swap(int[] data, int i, int j) {
    28         int temp = data[i];
    29         data[i] = data[j];
    30         data[j] = temp;
    31     }
    32  
    33      public static void printArray(int[] array) {
    34  
    35         System.out.print("[");
    36  
    37         int i;
    38         for(i= 0; i<array.length; i++) {        
    39  
    40             if(i ==array.length-1) {
    41                 System.out.print(array[i]);
    42             } else {
    43                 System.out.print(array[i]+",");
    44             }
    45         }    
    46         System.out.print("]");
    47  
    48     }
    49 }

    运行程序,如下:

  • 相关阅读:
    给WPF程序增加玻璃效果
    几款不错的VisualStudio2010插件
    一种快捷的解析HTML方案
    控制台输出螺旋型数字
    POJ 3692 Kindergarten(二分图匹配)
    HDU 1150 Machine Schedule(最小点覆盖)
    POJ 1847 Tram(最短路)
    HDU 1054 Strategic Game(树形DP)
    POJ 2195 Going Home(二分图最大权值匹配)
    POJ 1811 Prime Test(大素数判断和素因子分解)
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4834376.html
Copyright © 2011-2022 走看看