/** * 直接插入 * 时间复杂度O(n^2) * 空间复杂度O(1) */ @Test public void zjcrTest(){ //原数组,直接排序原数组 int[] data = new int[]{4,105,91,2,38,6,7,3,11,9}; //初始化 int temp; //在原数组中一个一个的排序 /** * 1、取出第二个元素,与前面所有的元素,也就是第一个进行比较,找出合适的位置插入进去 * 2、取出第三个元素,与前面所有的元素反着进行比较,因为前面的已经排好,所以没有找到相应的位置就会把元素向后移动,直到找到这个位置,留出空,插入进去 * 3、遍历整个数组,把所有的全部进行排序,得到结果 */ for (int i = 1; i < data.length; i++) { //创建一个即将插入数组的数 temp=data[i]; int j; //元素向后移动,寻找temp能够插入的位置 //data[j]>temp表示当找到这个位置的时候结束循环,也就是结束data中的元素的后移,为temp留出位置 for (j = i-1;j>=0 && data[j]>temp ;j--){ data[j+1]=data[j]; } //插入temp data[j+1]=temp; } //输出数组 System.out.println(Arrays.toString(data));
}