当前位置:编程学习 > C/C++ >>

排序算法(二) 插入排序

插入排序:

从头到尾遍历数组

将当前元素同当前元素之前的所有元素对比
如果,当前元素小于其之前元素,将当前元素向前移,直到使当前元素之前的所有元素按大小排好序

代码如下:

[html] 
package com.robert.paixu; 
 
/** 
 * 插入排序 
 * 从小到大排序 
 * @author Administrator 
 */ 
public class InsertSortAlgorithm { 
     
    public static void main(String[] args){ 
        int[] arrays = {4,6,9,2,0,1,-5,10,-20,100,20,15}; 
        insertSort(arrays); 
        display(arrays); 
    } 
     
    /** 
     * 插入排序 
     */ 
    private static void insertSort(int[] arrays){ 
        //循环遍历数组 
        int currentIndex = 0; 
        int preIndex = 0; 
        for(int i=0;i<arrays.length;i++) 
        { 
            /** 
             * 当前元素同当前元素之前的所有元素对比 
             * 1,将当前元素向前移,直到使当前元素之前的所有元素按大小排好序 
             */ 
            currentIndex = i; 
            preIndex = i-1; 
            while(currentIndex!=0&&preIndex>=0){ 
                if(arrays[currentIndex]<arrays[preIndex]) 
                { 
                    swap(arrays,currentIndex,preIndex); 
                    currentIndex--; 
                } 
                else 
                { 
                    break; 
                } 
                preIndex--; 
            } 
        } 
    } 
     
    private static void swap(int[] arrays,int currentIndex,int preIndex){ 
        int temp = arrays[currentIndex]; 
        arrays[currentIndex] = arrays[preIndex]; 
        arrays[preIndex] = temp; 
    } 
     
    /** 
     * 显示排序后的数组的值 
     * @param arrays 
     */ 
    private static void display(int[] arrays){ 
         
        for(int i=0;i<arrays.length;i++){ 
            System.out.print(arrays[i]+" "); 
        } 
    } 
     

在最好的情况下,即数组已经是有序的时候,插入排序的时间复杂度是O(n)

数组越有序,需要做的工作就越少

在最坏的情况下,该算法在最坏的情况下的时间复杂度为O(n^2)
 

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,