1.冒泡排序:
思路分析:
- 數組中 第一個空間值和第二個空間值比較,把較大的值存在第二個空間中。第二個空間值和第三個空間值比較,把較大的值存在第三個空間中。依次類推,把最大值存放在最後一個空間中。
- 因為已經找到最大的值了,是以再一次循環就要找到倒數第二大的值存放在倒數第二個空間。
代碼示範:
import java.util.Arrays;
public class MaoPao {
public static void main(String[] args) {
int[] arr={2,6,85,95,3,2,54,1};
bubbleSort(arr);
}
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 temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
2.選擇排序
思路分析:
算法原則(從小到大):先用數組第一個空間值和數組其他空間值依次作比較,如果找到比第一個空間值小的就把第一個值和目前值進行調換。依次比較完所有的内容,第一個空間值存放的一定是最小值。第一值比較完,在進行類推。比較完數組的所有位置。
使用空間找空間中需要的元素,外循環推進的是位置,内循環是目前位置之後的每一位。
代碼示範:
import java.util.Arrays;
public class XuanZe {
public static void main(String[] args) {
int[] arr={2,96,3,56,8,7,9};
selectSort(arr);
}
public static void selectSort(int[] arr){
// 提供比較空間的角标
for(int i=0;i<arr.length-1;i++){
// 提供剩餘空間的角标
for(int j=i+1;j<arr.length;j++){
// i對應的值不是最小的
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
3.一般查找
思路分析:
代碼示範:
public class Chazhao {
public static void main(String[] args) {
int[] arr={2,85,65,74,96,32,33};
System.out.println(searchKey(arr,32));
}
public static int searchKey(int[] arr,int value){
// 周遊查找
for (int i = 0; i < arr.length; i++){
if (value == arr[i]) return i;// 找到目标元素
}
return -1;// 完全周遊後,仍然沒結果。
}
}
4.二分查找
思路分析:
- 找到中間角标對應的值。
- 讓該元素和要找的值進行比較。
- 如果要找的數字大了,縮小範圍。要找的範圍是:中間角标+1 到 尾角标。反之,在頭角标 到 中間角标-1
- 不斷重複,直到找到目标。
代碼示範:
public class Demo05 {
public static int binarySearch(int []arr,int value){
// 定義變量存放最大角标 最小角标 中位角标
int max,min,mid;
min = 0;
max = arr.length-1;
mid = (min+max)>>1;
while (arr[mid]!=value){
if (value>arr[mid]){// 在右側區域
min = mid + 1;
}
else if(value<arr[mid]){// 在左側區域
max = mid - 1;
}
if(max<min){// 周遊結束
return -1;
}
mid = (min+max)>>1;// 再次二分
}
return mid;// 目标角标
}
}