天天看點

排序與查找

(1)排序

A:冒泡排序

相鄰元素兩兩比較,大的往後放,第一次完畢,最大值出現在了最大索引處。同理,其他的元素就可以排好。

publicstatic void bubbleSort(int[] arr) {

for(intx=0; x<arr.length-1; x++) {

for(inty=0; y<arr.length-1-x; y++) {

if(arr[y]> arr[y+1]) {

inttemp = arr[y];

arr[y]= arr[y+1];

arr[y+1]= temp;

}

}

}

}

B:選擇排序

把0索引的元素,和索引1以後的元素都進行比較,第一次完畢,最小值出現在了0索引。同理,其他的元素就可以排好。

publicstatic void selectSort(int[] arr) {

for(intx=0; x<arr.length-1; x++) {

for(inty=x+1; y<arr.length; y++) {

if(arr[y]< arr[x]) {

inttemp = arr[x];

arr[x]= arr[y];

arr[y]= temp;

}

}

}

}

(2)查找

A:基本查找

針對數組無序的情況

publicstatic int getIndex(int[] arr,int value) {

intindex = -1; 

for(intx=0; x<arr.length; x++) {

if(arr[x]== value) {

index= x;

break;

}

returnindex;

}

B:二分查找(折半查找)

針對數組有序的情況(千萬不要先排序,在查找)

publicstatic int binarySearch(int[] arr,int value) {

intmin = 0;

intmax = arr.length-1;

intmid = (min+max)/2;

while(arr[mid]!= value) {

if(arr[mid]> value) {

max= mid - 1;

}elseif(arr[mid] < value) {

min= mid + 1;

if(min> max) {

return-1;

mid= (min+max)/2;

returnmid;

}