// 插入排序
int [] arr = {4, 2, 1, 5, 3, 9, 7, 8, 6};
for (int i = 1; i < arr.ength; i++) {
int j = i; // j当前要插入的位置
int temp = arr[j]; // 把要向前插入的元素保存到temp里
while (j > 0 && temp < arr[j - 1]) { // tempx小于当前位置的前一个元素跳出循环 j > 0 短路与是为了防止 j - 1越界运算
arr[j] = arra[j - 1]; // 把前一个元素保存到当前位置
j--; // 当前位置向前移
}
arr[j] = temp; // 把需要插入的数据插入到正确的位置上
}
System.out.println(Arrays.toString(arr));
// 快速排序 非递归版 (函数调用即可)
public static void quickSortF(int[] array) {
int start = 0;
int end = array.length - 1;
LinkedList<int[]> nodeList = new LinkedList<int[]>();
nodeList.add(new int[]{start, end});
while (nodeList.size() > 0) {
int[] node = nodeList.getFirst();
int s = node[0];
int e = node[1];
int temp = array[s];
while (s < e) {
while (s < e && temp < array[e]) {
e--;
}
if (s == e) {
break;
}
array[s++] = array[e];
while (s < e && temp > array[s]) {
s++;
}
if (s == e) {
break;
}
array[e--] = array[s];
}
array[s] = temp;
nodeList.removeFirst();
if (node[0] < s - 1) {
nodeList.add(new int[]{node[0], s - 1});
}
if (s + 1 < node[1]) {
nodeList.add(new int[]{s + 1, node[1]});
}
}
}