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 }

    运行程序,如下:

  • 相关阅读:
    指向指针的指针
    判断是否遵守某个协议
    oc继承,实现,分类
    oc中没有空指针错误
    oc方法
    指针
    Array.diff
    ATM机允许4位或6位密码,而密码只能包含4位或6位数字。 如果函数传递了一个有效的PIN字符串,返回true,否则返回false。
    替换字符串中的字符为“(” 或“)”
    python 异常处理
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4834376.html
Copyright © 2011-2022 走看看