一、直接插入排序
/**
* 直接插入排序
*/
int[] insertSort(int[] arr) {
int temp, i, j;
int n = arr.length;
for (i = 1; i < n; i++) {
temp = arr[i];//从第二个元素开始,与前面的元素比较,如果比前面的大,就不用动,
// 小则将前面的放到temp的位置,temp继续与前面的比较
j = i - 1;
while (j >= 0 && temp < arr[j]) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
return arr;
}
排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序。
二、希尔排序
int[] shellSort(int[] arr) {
int i, j, n, gap, temp;
n = arr.length;
for (gap = n / 2; gap > 0; gap /= 2) {
for (i = gap; i < n; i++) { //-----------------+-----------+
temp = arr[i]; // |
for (j = i; j >= gap && temp < arr[j - gap]; j -= gap) { // | 此范围
arr[j] = arr[j - gap]; // | 相当于
} // | 插入排序
arr[j] = temp; // |
} //-------------------------------------------------+-----------+
}
return arr;
}
排序过程:先取一个正整数d1<n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止