public class Sort {
/*
* 选择
*/
public void selectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
swap(arr,i,min);
}
}
/*
* 冒泡
*/
public void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j + 1, j);
}
}
}
}
/*
* 直接插入
*/
public void insertSort(int[] arr) {
int j, insertNote;
for (int i = 1; i < arr.length; i++) {
insertNote = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > insertNote) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = insertNote;
}
}
/*
* 快排
*/
public void qSort(int[] arr) {
if (arr.length == 0)
return;
quickSort(arr, 0, arr.length - 1);
}
public void quickSort(int[] arr, int low, int high) {
if (low >= high)
return;
int pivot = arr[low];
int i = low;
int j = high;
while (i < j) {
while (i < j && arr[j] > pivot) {
j--;
}
while (i < j && arr[i] < pivot) {
i++;
}
if (i < j) {
swap(arr, i, j);
}
}
swap(arr, low, i);
quickSort(arr, low, i - 1);
quickSort(arr, i + 1, high);
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
/*
* 二分查找递归
*/
public int binarySearch(int[] arr, int key, int low, int high) {
if (key < arr[low] || key > arr[high] || low > high) {
return -1;
}
int mid = (low + high) / 2;
if(arr[mid] > key) {
return binarySearch(arr,key,low,mid - 1);
}else if(arr[mid] < key) {
return binarySearch(arr,key,mid + 1,high);
}else {
return mid;
}
}
/*
* 二分查找非递归
*/
public int bSearch(int[] arr,int key) {
int low = 0;
int high = arr.length - 1;
int mid = 0;
if (key < arr[low] || key > arr[high] || low > high) {
return -1;
}
while(low <= high) {
mid = (low + high)/2;
if(arr[mid] >key) {
high = mid -1;
}else if(arr[mid] < key) {
low = mid +1;
}else {
return mid;
}
}
return -1;
}
}
四种排序及二分查找
最新推荐文章于 2022-10-27 05:08:05 发布