package algorithm.sort;
import java.util.Arrays;
/**
* 直接插入排序;O(n^2);从大到小排序
* 思想:循环数组,依次查找当前数据在有序序列中的位置,然后将数据插入有序序列;
* 比如:先处理i=1的数据比较,如果a[1]>a[0],交换,这是a[0-1]是有序的;然后处理i=m的数据,将a[m]依次和前面的比较直到找到比a[m]大的a[p],将a[m]插入a[p-1]的位置,这是a[0-m]是有序的;一直到a[0-n]有序,结束
* @author wangchao
*
*/
public class Zhicha {
public void sort(int[] array){
for (int i = 1; i < array.length; i++) {
int j = i-1;
while(j>=0){
if(array[j]>=array[i]) break;
j--;
}
int insertIndex = j+1;
if(insertIndex<i){//说明j移动了,则移动数据,否则array[i]本身就是最小的
int temp = array[i];
for (int j2 = i; j2 > insertIndex; j2--) {
array[j2] = array[j2-1];
}
array[insertIndex] = temp;
}
}
}
public static void main(String[] args) {
int[] array = new int[]{2,1,6,3,3,8,9};
Zhicha pai = new Zhicha();
pai.sort(array);
System.out.println(Arrays.toString(array));
}
}
其他排序算法批量下载地址:几种经典的排序算法java实现