java实现直接插入排序

来源:互联网 发布:蜘蛛池平台源码 编辑:程序博客网 时间:2024/05/16 13:54

     上一篇搞定了直接选择排序,现在来看直接插入排序,和直接选择排序相比,直接插入排序属于插入排序类型的算法,直接插入排序算法思想:

1.首先插入排序需要将数组分为左右两个部分,左边部分为有序,右边部分为无序的,将无序的第一个元素和有序部分的元素比较,从右到左的顺序比较,直到找到合适的位置,插入这个元素;

2.排序开始时,将需要排序元素的第一个作为有序的,依次变为两个有序、三个有序…有序的左边的元素会越来越多,右边无序的越来越少,直到所有元素都有序。

直接插入排序算法代码:

package dataStructures;import java.util.Scanner;/**  * 类说明  * @author jiang * @date 创建时间:2014年10月6日 下午10:32:54  *///java实现直接插入排序public class DirectInsertSort {public void directInsertSort(int[] str){int key = 0;             //定义一个key用来存储需要插入的值for (int i = 1; i < str.length; i++) {key = str[i];        //从第二个元素开始,将数组分为左边有序,右边无序int j = i-1; while(j>=0&&str[j]>key){str[j+1] = str[j];     //从索引为i的元素开始从右到左比较j--;                   }     //当j数值小于0或者key==str[i]找到插入位置时循环结束str[j+1] = key;     //将key插入准确的位置}}public static void main(String[] args){Scanner scanner = new Scanner(System.in);System.out.println("请输入一个数组:");String s1 = scanner.nextLine();String[] s2 = s1.split(" ");int[] str = new int[s2.length];for (int i = 0; i < str.length; i++) {str[i] = Integer.valueOf(s2[i]);}DirectInsertSort dis = new DirectInsertSort();dis.directInsertSort(str);System.out.println("排序后数组为:");for (int i = 0; i < str.length; i++) {System.out.print(str[i]+" ");}scanner.close();}}

程序运行结果:

请输入一个数组:
25 12 65 35 2 65 8 9 1 0
排序后数组为:
0 1 2 8 9 12 25 35 65 65 

直接插入排序算法:

时间复杂度:O(n^2)

空间复杂度:O(1)

稳定性:稳定

0 0
原创粉丝点击