-
数组中的各种查找排序方法总是搞混淆,所以在此对java中数组常用的排序查找操作的代码和一些原理做了一下简单的总结:
class Arr {
public static void main(String args[])
{
int arr[] = { 5, 3, 8, 2, 0, 9, 1, 7 };//35208179,
Select(arr);
printArr(arr);
bubble(arr);
printArr(arr);
QuickSort(arr, 0, (arr.length-1));
printArr(arr);
System.out.println(halfSearch(arr,7));
}
public static int halfSearch(int arr[],int key)
{
/*
* 折半查找的前提是有序*/
int min = 0,max = arr.length-1,mid;
while(min <= max)
{
mid = (min + max) >> 1;
if(key > arr[mid])
{
min = mid + 1;
}
else if(key < arr[mid])
{
max = mid - 1;
}
else
return mid;
}
return -1;
}
public static void QuickSort(int arr[],int left,int right)
{
/*
* 快速排序是选择一个key值,首先和从最后一个元素从后向前比较,
* 大于最后一个换位置,然后和第一个元素从前往后比较,小于第一个换位置,
* 这样以此类推*/
if (left < right)
{
int tmp = partition(arr, left, right);
QuickSort(arr, left, tmp);
QuickSort(arr, tmp + 1, right);
}
}
public static int partition(int arr[], int left, int right) {
int i = 0, j = 0;
int key = 0, tmp = 0;
if (arr == null) { return 0; }
i = left;
j = right;
key = arr[left];
while (i < j) {
while (arr[j] > key)
{
--j;
}
swap(arr,i,j);
while (arr[i] < key) {
i++;
}
swap(arr,i,j);
}
return i;
}
public static void bubble(int arr[])
{
/*
* 冒泡排序是相邻的两个元素进行比较,如果符合条件换位*/
for(int i = 0; i < arr.length-1; i++)
{
for(int j = 0; j < arr.length-i-1; j++)
{
if(arr[j]>arr[j+1])
{
swap(arr,j,j+1);
}
}
}
printArr(arr);
}
public static void Select(int arr[])
{
/*
*选择排序的比较方法 是用第一个依次和其他元素比较并交换位置,第一轮比较结束后;
*拿第二个元素再一次和除了第一个元素外的其他元素比较并交换位置*/
for (int i = 0; i < arr.length- 1; i++)
{
for (int j = i+1; j < arr.length; j++)
{
if (arr[i]> arr[j])
{
swap(arr,i,j);
}
}
}
printArr(arr);
}
public static void swap(int arr[],int i,int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void printArr(int arr[]) {
for (int i : arr)
{
System.out.print(i + " ");
}
System.out.println();
}
}