class Sort
{
public static void main(String[] args) {
int[] a = {1,10,3,6,8,4,18,7,5};
// SelectSort(a);
// InsertSort(a);
ShellSort(a);
Print(a);
}
public static void Print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
System.out.print(',');
}
System.out.println("");
System.out.println("....");
}
public static void Print(int num) {
System.out.println("num is " + num);
}
public static void ShellSort(int[] arr) {
/*希尔排序*/
int len = arr.length;
int h = 1;
int tmp = 0;
while (h < len / 3) {
h = 3 * h + 1;
}
// 1,10,3,6,8,4 ,18,7,5
/*
1,10,3,6
8,4,18,7
5
1,4,3,6
8,10,18,7
5
1,4,3,6
5,10,18,7
8
看出规律了吗? 其实是上下排序,不是左右的排的。
*/
while ( h >= 1) {
for (int i = h; i < len; i++) {
for (int j = i; j >= h && arr[j] < arr[j - h]; j -= h) {
tmp = arr[j];
arr[j] = arr[j - h];
arr[j - h] = tmp;
}
Print(arr);
}
h = h / 3;
}
}
public static void InsertSort(int[] arr) {
/* 插入法排序
向后比较,交换
*/
int tmp = 0;
int key = 0;
int j = 0;
int len = arr.length;
for (int i = 1; i < len; i++) {
key = arr[i];
j = i;
while (j > 0 && key > arr[j - 1]) {
arr[j] = arr[j - 1];
j = j - 1;
}
arr[j] = key;
}
}
public static void SelectSort(int[] arr) {
/*
选择法排序 (N*N)/2
*/
int tmp = 0;
int len = arr.length;
for (int i =0; i < len; i++) {
for (int j = i; j < len; j++) {
if (arr[i] > arr[j]) {
tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp; }
}
}
}
}
java 排序算法汇总
最新推荐文章于 2023-03-10 10:52:33 发布