public class Demo {
public static void main(String[] args) {
int arr[] = { 12, 4, 67, 22, 5, 88, 1 };
quickSort(arr);
for(int x : arr)
System.out.println(x);
}
//折半查找
// public static int halfFind(int[] arr, int left, int right, int key) {
// while(left <= right) {
// int mid = left + (right - left) / 2;
// if(arr[mid] > key)
// right = mid - 1;
// else if(arr[mid] < key)
// left = mid + 1;
// else
// return mid;
// }
// return -1;
// }
//
public static int halfFind(int[] arr, int left, int right, int key) {
while(left < right) {
int mid = left + (right - left) / 2;
if(arr[mid] > key)
right = mid - 1;
else if(arr[mid] < key)
left = mid + 1;
else
right = mid;
}
if(arr[left] == key)
return left;
else
return -1;
}
//插入排序
public static void insertSort(int[] arr) {
for(int i = 1; i < arr.length; i++) {
int j = i - 1;
int tmp = arr[i];
while(j >= 0 && arr[j] > tmp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = tmp;
}
}
//冒泡排序
public static void bubbleSort(int[] arr) {
for(int i = 1; i < arr.length; i++) {
for(int j = 0; j < arr.length - i; j++) {
if(arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
//选择排序
public static void selectSort(int[] arr) {
for(int i = 1; i < arr.length; i++) {
//此时max是本次排序要确定数据的位置
int max = arr.length - i;
//tmp记录原位置的数据
int tmp = arr[max];
for(int j = 0; j <= arr.length - i - 1; j++) {
max = (arr[max] > arr[j]) ? max : j;
}
//交换数据
arr[arr.length - i] = arr[max];
arr[max] = tmp;
}
}
//堆排序
public static void heapSort(int[] arr) {
buildMaxHeap(arr);
for(int i = 1; i < arr.length; i++) {
int tmp = arr[0];
arr[0] = arr[arr.length - i];
arr[arr.length - i] = tmp;
maxHeapify(arr, 0, arr.length - i);
}
}
public static void maxHeapify(int[] arr, int index, int size) {
int left = 2 * index + 1;
int right = 2 * index + 2;
int max = index;
if(left < size && arr[left] > arr[index])
max = left;
if(right < size && arr[right] > arr[max])
max = right;
if(max != index) {
int tmp = arr[index];
arr[index] = arr[max];
arr[max] = tmp;
maxHeapify(arr, max, size);
}
}
//建立最大堆
public static void buildMaxHeap(int[] arr) {
for(int i = (arr.length - 1) / 2; i >= 0; i--) {
maxHeapify(arr, i, arr.length);
}
}
//快速排序
public static void quickSort(int[] arr) {
quickSortInternal(arr, 0, arr.length - 1);
}
public static void quickSortInternal(int[] arr, int left, int right) {
if(left >= right)
return;
int beg = left;
int end = right;
int cur = arr[beg];
while (beg < end) {
while(beg < end && arr[end] >= cur)
end--;
arr[beg] = arr[end];
while(beg < end && arr[beg] <= cur)
beg++;
arr[end] = arr[beg];
}
arr[beg] = cur;
quickSortInternal(arr, 0, beg - 1);
quickSortInternal(arr, beg + 1, right);
}
}