public class DirectinsertSort {
public void directinsertSort(int arr[]) {
int j,temp;
for(int i = 1; i < arr.length; i ++) {
temp = arr[i];
for(j =i-1; j >= 0; j --) {
if(temp >= arr[j]) {
break;
}
arr[j+1] = arr[j];
}
arr[j+1] = temp;
}
}
public static void main(String[] args) {
int arr[] = {11,23,14,88,99,77,55,67,66};
new DirectinsertSort().directinsertSort(arr);
for(int a : arr) {
System.out.print(a + " ");
}
}
}
运行结果:11 14 23 55 66 67 77 88 99
代码编写与原文相差之处为if条件判断条件为temp>=arr[j],在此处改变的原因是想要让其更改为从小至大排序。
public class QuitSort {
public void quitSort(int arr[], int low, int high) {
int start = low;
int end = high;
int key = arr[low];
while(start < end) {
while(end > start && key <= arr[end]) {
end --;
}
if(key >= arr[end]) {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
}
while(start < end && arr[start] <= key) {
start ++;
}
if(arr[start] >= key) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
if(start > low) {
quit_sort(arr, low, start-1);
}
if(end < high) {
quit_sort(arr, end+1, high);
}
}
public static void main(String[] args) {
int arr[] = {12,20,5,16,15,1,30,45,23,9};
int start = 0;
int end = arr.length - 1;
new QuitSort().quitSort(arr, start, end);
for(int a : arr){
System.out.print(a + " ");
}
}
}
运行结果:1 5 9 12 15 16 20 23 30 45
最后通过递归将当前基准值两边的杂乱数据排序,直到标识start、end回归最初的初始标记也就是查询数组的下标起点low和下标终点high。
public class BubbleSort {
public void bubbleSort(int[] arr) {
for(int i = 0; i < arr.length - 1; i++) {
for(int j = 0; j < arr.length - 1 - i; j++) {
if(arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
public static void main(String[] args) {
int arr[] = {11,23,14,88,99,77,55,67,66,1,30,45,23,9};
new BubbleSort().bubbleSort(arr);
for(int a : arr) {
System.out.print(a + " ");
}
}
}
运行结果:1 9 11 14 23 23 30 45 55 66 67 77 88 99
外循环用于控制循环次数,内循环用于将数组中较大值后移,通过j < arr.length - 1 - i能将判断好的较大值排除出要判断的数组,最终,将数组中的值完全排列。