排序方法:基础的有选择排序和冒泡排序,进阶的有希尔排序、快速排序等。
1.选择排序
/*
选择排序,以升序为例
*/
class ArraySortDemo
{
public static void main(String[] args)
{
int[] arr = {9,6,7,3,3,2,1,4,8,5};
selectSort(arr);
printArray(arr);
//System.out.println("Hello World!");
}
public static void selectSort(int[] arr)
{
for(int i = 0; i < arr.length; i++)
{
for(int j = i + 1; j < arr.length; j++)
{
if(arr[i] > arr[j])
{
//交换数值
int tmp;
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
/*位运算交换
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
*/
}
}
}
}
//默认arr不为空,否则有安全问题
public static void printArray(int[] arr)
{
System.out.print("{");
for(int i = 0; i < arr.length/*i < arr.length - 1*/; i++)
{
//这样每次都if效率不高,可以循环到arr.length-1,在循环外输出最后一个数据
if(i == arr.length - 1)
{
System.out.println(arr[i] + "}");
break;
}
System.out.print(arr[i] + ",");
}
//System.out.println(arr[arr.length - 1] + "}");
}
}
2.冒泡排序
/*
冒泡排序,以升序为例
*/
class ArraySortDemo
{
public static void main(String[] args)
{
int[] arr = {9,6,7,3,3,2,1,4,8,5};
bubbleSort(arr);
printArray(arr);
//System.out.println("Hello World!");
}
public static void bubbleSort(int[] arr)
{
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 tmp;
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
/*位运算交换
arr[j] = arr[j] ^ arr[j + 1];
arr[j + 1] = arr[j] ^ arr[j + 1];
arr[j] = arr[j] ^ arr[j + 1];
*/
}
}
}
}
//默认arr不为空,否则有安全问题
public static void printArray(int[] arr)
{
System.out.print("{");
for(int i = 0; i < arr.length/*i < arr.length - 1*/; i++)
{
//这样每次都if效率不高,可以循环到arr.length-1,在循环外输出最后一个数据
if(i == arr.length - 1)
{
System.out.println(arr[i] + "}");
break;
}
System.out.print(arr[i] + ",");
}
//System.out.println(arr[arr.length - 1] + "}");
}
}
3.折半查找
/*
折半查找
*/
class BinarySearchDemo
{
public static void main(String[] args)
{
int[] arr = {9,6,7,3,3,2,1,4,8,5};
int key = 8;
bubbleSort(arr);
printArray(arr);
int index = binarySearch(arr, key);
System.out.println("元素" + key + "在数组中的索引值为:" + index);
//System.out.println("Hello World!");
}
//折半查找
public static int binarySearch(int[] arr, int key)
{
int low = 0, high = arr.length - 1,mid;
//第一种方法:
while(low <= high)
{
mid = (low + high) >> 1;
if(key == arr[mid])
return mid;
else if(key > arr[mid])
low = mid + 1;
else
high = mid - 1;
}
//循环完没找到,返回不存在
return -1;
/*第二种方法
mid = (low + high) >> 1;
while(key != arr[mid])
{
if(key > arr[mid])
low = mid + 1;
else
high = mid - 1;
if(low > high)
return -1;
mid = (low + high) >> 1;
}
return mid;
*/
}
//冒泡排序
public static void bubbleSort(int[] arr)
{
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 tmp;
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
/*位运算交换
arr[j] = arr[j] ^ arr[j + 1];
arr[j + 1] = arr[j] ^ arr[j + 1];
arr[j] = arr[j] ^ arr[j + 1];
*/
}
}
}
}
//默认arr不为空,否则有安全问题
public static void printArray(int[] arr)
{
System.out.print("{");
for(int i = 0; i < arr.length/*i < arr.length - 1*/; i++)
{
//这样每次都if效率不高,可以循环到arr.length-1,在循环外输出最后一个数据
if(i == arr.length - 1)
{
System.out.println(arr[i] + "}");
break;
}
System.out.print(arr[i] + ",");
}
//System.out.println(arr[arr.length - 1] + "}");
}
}