//插入排序
public class InsertionSort {
public static void main(String[] args) {
InsertionSort insertionSort = new InsertionSort();
int[] arr = insertionSort.insertionSort(new int[] { 1, 4, 7, 8, 5, 2, 3, 6, 9, 0 });
for (int i : arr) {
System.out.println(i);
}
}
/***
* 思路:外层循环用来从无序区域中取值,起始位置是下标1,把下标0到下标0当作已经有序的区域,
* 把要取的值用临时变量val存起来,如果这个值正好应该排在有序区域的最后,那么插入位置就是它原来的下标,
* 如果这个值比有序区域最后一个值大,那么就用内循环从后向前遍历有序区域找到合适的插入位置,
* 内循环每一次循环都把有序区域的值移动到插入位置,然后把插入位置向前移动一位。
*
* @param arr
* @return
*/
private int[] insertionSort(int[] arr) {
// 外层循环从为排序的区域中取值作为插入到有序区域中的值
for (int i = 1; i < arr.length; i++) {
int val = arr[i];// 要插的值
int insert = i;// 插入位置
for (int j = i - 1; j >= 0; j--) {// 内层循环移动插入位置
if (val > arr[j]) {
arr[insert] = arr[j];
insert -= 1;
}
}
arr[insert] = val;// 把值插入到有序区域中合适的位置
}
return arr;
}
}
请大家指点