java插入排序_Java代码实现插入排序
插入排序是一个简单,直接而稳定的排序算法,顾名思义就是在一个已经有序的的数列中找到一个正确的位置插入一个数;
排序思想
排序思想输入:任意无序数组(a1,a2.....an;
输出:排序后的数组(a1,a2.....an);
public static int[] asc_sort(int[] arr){ // int[] arr = {5,2,4,6,1,3}; //遍历数组,每遍历一次就相当于得到一个a[j] 的目标数字插入到a[0~j - 1]这个有序数组中 for(int j = 1; j < arr.length; j++) { int num = arr[j]; int i = j -1; //构建一个[0 ~ j -1]的有序子数组,当数组中存在比插入数据大时,会将数组中的大于插入数据的数往后移动,直到找到不大于插入数字时,跳出循环; while (i >= 0 && arr[i] > num) { //将每个数组元素往后移动 arr[i+1] = arr[i]; i = i - 1; } //将插入的数字放入到找到的数组中的第一个不大于插入数字的位置。 arr[i + 1] = num; } return arr;}
当输入5,2,4,6,1,3时,正确的排列出1,2,3,4,5,6
算法的核心思想就是先去构建以个有序的子数组,如:当第一次循环时,子数组 a[0],只有一个元素,必然是有序的,第二次循环时a[j] = 2, a[i] = 5;满足while循环条件,进入循环,然后将子数组a[0]中的元素向后移动,变成了a[1] = 2,此时 i= i - 1= -1;跳出循环,然后将a[i+1],也就是找到的适合插入数字的下标处的元素赋值位插入的数字,此时就变成了2,5,4,6,1,3;插入数字2的前面已经没有比它更大的数了,所以这就是它此时循环时最正确的位置,此时的子数组就变成了a[0,1]=2,5;继续迭代,原理相同,就不在赘述了。
插入排序是一个简单,直接而稳定的排序算法,顾名思义就是在一个已经有序的的数列中找到一个正确的位置插入一个数; 排序思想 输入:任意无序数组(a1,a2.....an; 输出:排序后的数组(a1,a2.....an); public static int[] asc_sort(int[] arr){ // int[] arr = {5,2,4,6,1,3}; //遍历数组,每遍历一次就相当于得到一个a[j] 的目标数字插入到a[0~j - 1]这个有序数组中 for(int j = 1; j < arr.length; j++) { int num = arr[j]; int i = j -1; //构建一个[0 ~ j -1]的有序子数组,当数组中存在比插入数据大时,会将数组中的大于插入数据的数往后移动,直到找到不大于插入数字时,跳出循环; while (i >= 0 && arr[i] > num) { //将每个数组元素往后移动 arr[i+1] = arr[i]; i = i - 1; } //将插入的数字放入到找到的数组中的第一个不大于插入数字的位置。 arr[i + 1] = num; } return arr;} 当输入5,2,4,6,1,3时,正确的排列出1,2,3,4,5,6 算法的核心思想就是先去构建以个有序的子数组,如:当第一次循环时,子数组 a[0],只有一个元素,必然是有序的,第二次循环时a[j] = 2, a[i] = 5;满足while循环条件,进入循环,然后将子数组a[0]中的元素向后移动,变成了a[1] = 2,此时 i= i - 1= -1;跳出循环,然后将a[i+1],也就是找到的适合插入数字的下标处的元素赋值位插入的数字,此时就变成了2,5,4,6,1,3;插入数字2的前面已经没有比它更大的数了,所以这就是它此时循环时最正确的位置,此时的子数组就变成了a[0,1]=2,5;继续迭代,原理相同,就不在赘述了。