package sort;
/**
* Create by IDEA
* User: zhangqi
* Date: 2019/4/7
* Desc: 排序公共方法类
*/
public class MySort {
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
冒泡排序
package sort;
/**
* Create by IDEA
* User: zhangqi
* Date: 2019/4/7
* Desc: 冒泡排序
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {5, 3, 6, 2, 8, 1, 9, 7};
bubbleSort(arr);
for (Integer i : arr) {
System.out.print(i);
System.out.print(" ");
}
}
public static int[] bubbleSort(int[] arr) {
if (arr == null || arr.length == 0) return arr;
int length = arr.length;
for (int i = 0; i < length - 1; i++) {
for (int j = length - 1; j > i; j--) {
if (arr[j] > arr[j - 1]) MySort.swap(arr, j, j - 1);
}
}
return arr;
}
}
快速排序
package sort;
/**
* Create by IDEA
* User: zhangqi
* Date: 2019/4/9
* Desc: 快速排序
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {50, 10, 90, 30, 70, 40, 80, 60, 20, 12, 23, 43, 21};
quickSort(arr, 0, arr.length - 1);
for (Integer i : arr) {
System.out.print(i);
System.out.print(" ");
}
}
/**
* 递归排序
* @param arr
* @param low
* @param high
*/
private static void quickSort(int[] arr, int low, int high) {
if (arr == null || arr.length == 0) return;
if (low < high) {
int temp = index(arr, low, high);
quickSort(arr, low, temp - 1);
quickSort(arr, temp + 1, high);
}
}
/**
* 局部调整,返回坐标地址
* @param arr
* @param low
* @param high
* @return
*/
private static int index(int[] arr, int low, int high) {
int point = arr[low];
while (low < high) {
while (high > low && arr[high] >= point)
high--;
MySort.swap(arr, low, high);
while (high > low && arr[low] <= point)
low++;
MySort.swap(arr, low, high);
}
return low;
}
}
简单选择排序
package sort;
/**
* Create by IDEA
* User: zhangqi
* Date: 2019/4/7
* Desc: 简单选择排序
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {5, 3, 6, 2, 8, 1, 9, 7};
selectSort(arr);
for (Integer i : arr) {
System.out.println(i);
}
}
public static int[] selectSort(int[] arr) {
if (arr == null || arr.length == 0) return arr;
int length = arr.length;
for (int i = 0; i < length - 1; i++) {
for (int j = i + 1; j < length; j++) {
if (arr[i] > arr[j]) MySort.swap(arr, i, j);
}
}
return arr;
}
}
堆排序
package sort;
/**
* Create by IDEA
* User: zhangqi
* Date: 2019/4/7
* Desc: 堆排序
*/
public class HeapSort {
public static void main(String[] args) {
int[] arr = {50, 10, 90, 30, 70, 40, 80, 60, 20, 12, 23, 43, 21};
heap(arr);
for (Integer i : arr) {
System.out.print(i);
System.out.print(" ");
}
}
public static void heap(int[] arr) {
if (arr == null || arr.length == 0) return;
int length = arr.length;
/** 堆结构是完全二叉树,假如结点数目为n(n>1),则n/2及其以内的都是非叶子结点 */
for (int i = length / 2; i > 0; i--) {
heapTop(arr, i, length - 1);
}
/** 首尾交换,继续将余下的数据调整为堆结构 */
for (int j = length - 1; j > 0; j--) {
MySort.swap(arr, 0, j);
heapTop(arr, 1, j);
}
}
/**
* 将完全二叉树调整为堆结构
* @param arr
* @param s
* @param length
*/
private static void heapTop(int[] arr, int s, int length) {
for (int j = 2 * s; j <= length; j = 2 * s) {
if (j < length) {
if (arr[j - 1] < arr[j]) ++j;
}
if (arr[s - 1] < arr[j - 1]) {
int temp = arr[s - 1];
arr[s - 1] = arr[j - 1];
arr[j - 1] = temp;
s = j;
} else {
break;
}
}
}
}