[Java数据结构]简单排序之插入排序

来源:互联网 发布:淘宝商城怎么开店 编辑:程序博客网 时间:2024/06/05 07:38

》》图例思路

》标记第一个数

》遍历从第二个数开始,44这个数的位置就已经空了

》44作为a[in],比较a[in]和a[in-1],这里44比3大,插入空位

》外循环+1,依旧是当前标记数和自己的前一个数比较

》38比44小

》交换位置

》插入

》》代码思路:

在外层for循环中,out变量从1开始向右移动,内存in则从out变量开始向左移动,temp作为标记数也是从out开始,直到temp变量小于in所指的数据项,或者in<0,内循环结束。内循环每一趟都向右移动一个已经排序的数据项。

》》代码

package 简单排序;/* * 第一次最多比较一次,第二次最多比较两次.... * 此算法比冒泡快一倍,比选择略快 * 如果无序 O(N^2) * 如果有序或基本有序O(N) *  * */class InsertArr {private long a[];private int n;// 数组的个数public InsertArr(int max) {a = new long[max];n = 0;}public void insert(int i) {a[n] = i;n++;}public void display() {for (int i = 0; i < n; i++) {System.out.print(a[i] + " ");}System.out.println("");}public void selectSort() {int out, in;long temp;for (out = 1; out < n; out++) {//从第二个数开始往后遍历,因为要和前一个比较temp = a[out];//临时数=[out]in = out;//内循环也是从第二个数开始while (in > 0 && a[in - 1] >= temp) {//in会递减,把in的前一个数和临时数做比较a[in] = a[in - 1];//把前一个数填进当前这个数的坑里,就当a[in-1]已经空了in--;}a[in] = temp;//临时数插入}}}public class Insert {public static void main(String[] args) {InsertArr arr = new InsertArr(100);arr.insert(20);arr.insert(3);arr.insert(6);arr.insert(78);arr.display();arr.selectSort();arr.display();}}




原创粉丝点击