// 冒泡排序
public void bubble_sort() {
int arr[] = { 1, 23, 34, 54, 2, 3, 12, 9 };
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 t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
// 选择排序
public void selection_sort() {
int arr[] = { 1, 23, 34, 54, 2, 3, 12, 9 };
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
// 用<就是从大到小,用>就是由小到大
if (arr[i] > arr[j]) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
// 查找算法(从数组里查找12这个数);
public void lookup_algorithm() {
int arr[] = { 1, 23, 34, 54, 2, 3, 12, 9 };
boolean flag = false;
int index = 12;
for (int i = 0; i < arr.length; i++) {
if (index == arr[i]) {
flag = true;
break;
}
}
if (flag) {
System.out.println("找到了:" + index);
} else {
System.out.println("未找到");
}
}
// 插入算法(插入5)
public void insertion_algorithm() {
int arr[] = { 1, 23, 34, 54, 2, 3, 12, 9 };
int num = 5;
arr[arr.length - 1] = num; // 给数组最后一个坐标赋值
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
// 数组复制
public void Copy_Ary() {
int arrOld[] = { 1, 32, 32, 4234, 4334, 1223, 1 };
int arrNew[] = new int[arrOld.length];
for (int i = 0; i < arrOld.length; i++) {
arrNew[i] = arrOld[i];
}
for (int i = 0; i < arrNew.length; i++) {
System.out.print(arrNew[i] + "\t");
}
}
/**
* 直接插入排序 基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,
* 现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
*/
public static void insertSort() {
int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54, 56, 17, 18, 23, 34, 15, 35,
25, 53, 51, 1, 96 };
int temp = 0;
for (int i = 1; i < a.length; i++) {
int j = i - 1;
temp = a[i];
for (; j >= 0 && temp < a[j]; j--) {
a[j + 1] = a[j]; // 将大于temp的值整体后移一个单位
}
a[j + 1] = temp;
}
for (int i = 0; i < a.length; i++) {
if (i % 10 == 9) {
System.out.print(a[i] + "\n");
} else {
System.out.print(a[i] + "\t");
}
}
}
/**
* 希尔排序(最小增量排序) 基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,
* 每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(
* d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
*/
public static void shellSort() {
int a[] = { 1, 54, 6, 3, 78, 34, 12, 45, 56, 100 };
double d1 = a.length;
int temp = 0;
while (true) {
d1 = Math.ceil(d1 / 2);
int d = (int) d1;
for (int x = 0; x < d; x++) {
for (int i = x + d; i < a.length; i += d) {
int j = i - d;
temp = a[i];
for (; j >= 0 && temp < a[j]; j -= d) {
a[j + d] = a[j];
}
a[j + d] = temp;
}
}
if (d == 1)
break;
}
for (int i = 0; i < a.length; i++) {
if (i % 10 == 9) {
System.out.print(a[i] + "\n");
} else {
System.out.print(a[i] + "\t");
}
}
}