上一篇搞定了直接选择排序,现在来看直接插入排序,和直接选择排序相比,直接插入排序属于插入排序类型的算法,直接插入排序算法思想:
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)
稳定性:稳定