冒泡排序:
int temp;//定義一個臨時變量
for(int i=0;i<arr.length-1;i++){//冒泡趟數(shù)
for(int j=0;j<arr.length-i-1;j++){
if(arr[j+1]<arr[j]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
選擇排序:
int[] arr={1,3,2,45,65,33,12};
System.out.println("交換之前:");
for(int num:arr){
System.out.print(num+" ");
}
//選擇排序的優(yōu)化
for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
int k = i;
for(int j = k + 1; j < arr.length; j++){// 選最小的記錄
if(arr[j] < arr[k]){
k = j; //記下目前找到的最小值所在的位置
}
}
//在內(nèi)層循環(huán)結(jié)束,也就是找到本輪循環(huán)的最小的數(shù)以后,再進(jìn)行交換
if(i != k){ //交換a[i]和a[k]
int temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
System.out.println();
System.out.println("交換后:");
for(int num:arr){
System.out.print(num+" ");
}
}
二分查找:
1.遞歸的方式:
/**
* 使用遞歸的二分查找
*title:recursionBinarySearch
*@param arr 有序數(shù)組
*@param key 待查找關(guān)鍵字
*@return 找到的位置
*/
public static int recursionBinarySearch(int[] arr,int key,int low,int high){
if(key < arr[low] || key > arr[high] || low > high){
return -1;
}
int middle = (low + high) / 2; //初始中間位置
if(arr[middle] > key){
//比關(guān)鍵字大則關(guān)鍵字在左區(qū)域
return recursionBinarySearch(arr, key, low, middle - 1);
}else if(arr[middle] < key){
//比關(guān)鍵字小則關(guān)鍵字在右區(qū)域
return recursionBinarySearch(arr, key, middle + 1, high);
}else {
return middle;
}
}
2.while循環(huán)實現(xiàn):
/**
* 不使用遞歸的二分查找
*title:commonBinarySearch
*@param arr
*@param key
*@return 關(guān)鍵字位置
*/
public static int commonBinarySearch(int[] arr,int key){
int low = 0;
int high = arr.length - 1;
int middle = 0; //定義middle
if(key < arr[low] || key > arr[high] || low > high){
return -1;
}
while(low <= high){
middle = (low + high) / 2;
if(arr[middle] > key){
//比關(guān)鍵字大則關(guān)鍵字在左區(qū)域
high = middle - 1;
}else if(arr[middle] < key){
//比關(guān)鍵字小則關(guān)鍵字在右區(qū)域
low = middle + 1;
}else{
return middle;
}
}
return -1; //最后仍然沒有找到碑幅,則返回-1
}
3.測試代碼:
public static void main(String[] args) {
int[] arr = {1,3,5,7,9,11};
int key = 4;
//int position = recursionBinarySearch(arr,key,0,arr.length - 1);
int position = commonBinarySearch(arr, key);
if(position == -1){
System.out.println("查找的是"+key+",序列中沒有該數(shù)碉就!");
}else{
System.out.println("查找的是"+key+",找到位置為:"+position);
}
}