1.1直接插入排序
1.1.1基本介绍:
插入式排序也就是直接插入排序属于内部排序,也就是将所要排序的元素以插入的方式找到该元素在数组中的合适位置,从而达到我们排序的目的。
直接插入排序(Insertion Sorting):基本思想是将所要排列的n个数据元素分别看成一个有序别和一个无序表,开始时我们的有序表仅包含一个元素,无序表中包含剩下的n-1个元素,在我们排序的过程中我们需要每次都在无序表中取出第一个元素,将它的排序码依次与有序表中各元素的排序码进行比较,进而确定它的位置,从而合理的插入到有序表的位置当中,使之成为新的有序表
1.1.2代码实现:
package DataStructure;
import java.util.Arrays;
public class InsertionSort {
public static void main(String[] args) {
int[] arr = {101,34,119,1,-1,34,89};
InsertSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void InsertSort(int[] arr) {
for(int i=1;i<arr.length;i++) {
int Value=arr[i];//先将无序表中的第一个元素设为待插入的数
int Index=i-1;//将下标放置于有序表中的最后一个元素位置
/** 献给Value找到要插入的位置
* 说明:
* 1.Index>=0 保证数组不会越界
* 2.Value<arr[Index] 则需要继续往前找 找到比Value小的值 从而确定插入的位置
* 2.在比较的过程中 每进行一次比较就需要将有序表中数值比Value大的元素后移也就是 arr[Index+1] = arr[Index] 这条语句
* 3.然后将Index-- 往前移动 在有序表中继续查找可以插入的位置
*/
while(Index>=0&&Value<arr[Index]) {
arr[Index+1] = arr[Index];
Index--;
}
/**
* 当我们退出while循环时 也就是在有序表中找到我们要插入的位置,此时应该是 Index+1
* 因为当前Index所指向的有序表中的元素是比我们这个Value小的 因此我们需要将Index+1 也就是后移一个位置 此时才是我们正确的插入位置
*
*/
//这里进行判断是否需要赋值 如果Index+1 跟我们在无序表中第一个元素的位置不一样 那么我们也就可以确定此时我们的插入是正确的
if(Index+1!=i) {
arr[Index+1]=Value;
}
}
}
}