插入排序之java实现

来源:互联网 发布:js 上传文件 前台实现 编辑:程序博客网 时间:2024/06/05 14:40

(建议在学习排序算法的同时,顺便练习对数组数据的输入:本博客中冒泡排序、优化版、选择排序(给定数组数据)插入排序、希尔排序(键盘输入数据)。快速排序(电脑自动以随机数的形式输入数据)


插入排序:将待插入的数据与已排序好的数据作比较,插入适当的位置。

特点:

 1、需比较(n-1)(n-2)+...+3+2+1=n(n-1)/2次,时间复杂度为O(n^2);如果本身就已排序完成的数据,只需比较n-1次即可,时间复杂度为O(n)。
 2、是稳定排序法。
 3、只需一个额外空间,空间复杂度为O(1)。
 4、适用于大部分数据已经过排序或已排序数据库新增数据后进行排序的情况。

 5、插入排序会造成数据的大量迁移,建议在链表上使用。


核心代码:

public void insert() {//要进行length-1次插入for(int i = 1; i < arr.length; i++) {//用temp来记录插入的元素int temp = arr[i];//用j来标记与之比较的元素int j = i-1;//如果插入的元素比与之比较的元素小while(j>=0 && temp<arr[j]) {//把比插入元素大的元素向后移一个位置arr[j+1] = arr[j];j--;}//将插入元素放到元素后移造成的空余位置arr[j+1] = temp;System.out.print("第"+i+"次排序后的数组:");showarr();}}


完整代码:

public class InsertSort{int arr[] = new int[4];public static void main(String[] args) {InsertSort is = new InsertSort();//输入数组数据is.inputarr();System.out.print("输入数组为:");//打印输入的数组is.showarr();//进行插入排序is.insert();System.out.print("完成排序后的数组为:");//打印排序好的数组is.showarr();}public void inputarr() {for(int i = 0; i < arr.length; i++) {try{System.out.print("请输入第"+(i+1)+"个元素:");InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);arr[i] = Integer.parseInt(br.readLine());}catch(Exception e) { }}}public void showarr() {for(int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}System.out.println();}public void insert() {//要进行length-1次插入for(int i = 1; i < arr.length; i++) {//用temp来记录插入的元素int temp = arr[i];//用j来标记与之比较的元素int j = i-1;//如果插入的元素比与之比较的元素小while(j>=0 && temp<arr[j]) {//把比插入元素大的元素向后移一个位置arr[j+1] = arr[j];j--;}//将插入元素放到元素后移造成的空余位置arr[j+1] = temp;System.out.print("第"+i+"次排序后的数组:");showarr();}}}

(注意导入IO)

输入的数据以及程序运行结果:

请输入第1个元素:4
请输入第2个元素:3
请输入第3个元素:2
请输入第4个元素:1
输入数组为:4 3 2 1 
第1次排序后的数组:3 4 2 1 
第2次排序后的数组:2 3 4 1 
第3次排序后的数组:1 2 3 4 
完成排序后的数组为:1 2 3 4 


转载请标明出处,原文地址:http://blog.csdn.net/qq_35383263/article/details/60469958

0 0
原创粉丝点击