package com.st.carinsu.robot.util;
import org.junit.Test;
/**
* Created by fuxiaoyu on 2019-09-24
*/
public class TestFYY {
private int[] a = {3, 5, 33, 7, 654, 8, 96, 2, 5, 65, 54, 6, 45, 65, 431, 455, 45, 1, 4, 54, 9, 76, 10, 3};
// private int[] a = {3};
/**
* 直接插入排序
*/
@Test
public void directInsert() {
for (int i = 1; i < a.length; i++) {
for (int j = i - 1; j >= 0; j--) {
if (a[j + 1] >= a[j]) {
break;
} else {
swap(j + 1, j);
}
}
}
print();
}
/**
* 折半插入排序
*/
@Test
public void halfInsert() {
int low;
int high;
int mid;
int temp;
for (int i = 1; i < a.length; i++) {
low = 0;
high = i - 1;
mid = (low + high) / 2;
while (high > low) {
if (a[i] < a[mid]) {
high = mid - 1;
mid = (low + high) / 2;
} else {
low = mid + 1;
mid = (low + high) / 2;
}
}
if (a[i] < a[mid]) {
temp = a[i];
for (int x = i - 1; x >= mid; x--) {
a[x + 1] = a[x];
}
a[mid] = temp;
} else {
temp = a[i];
for (int x = i - 1; x > mid; x--) {
a[x + 1] = a[x];
}
a[mid + 1] = temp;
}
}
print();
}
/**
* 希尔排序
*/
@Test
public void hill() {
int f = 2;
int gap = a.length / f;
while (gap != 0) {
for (int i = 0; i < gap; i++) {
for (int x = i + gap; x < a.length; x+=gap) {
for (int y = x - gap; y >= 0; y-=gap) {
if (a[y + gap] >= a[y]) {
break;
} else {
swap(y + gap, y);
}
}
}
}
gap = gap / f;
}
print();
}
private void print() {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + ",");
}
}
private void swap(int x, int y) {
a[x] = a[x] ^ a[y];
a[y] = a[y] ^ a[x];
a[x] = a[x] ^ a[y];
}
}