给大家分享下:快速排序、冒泡排序、二分查找

 

快速排序:

 给大家分享下:快速排序、冒泡排序、二分查找_第1张图片

如图:首先取出下标为0的数,然后依次与下标为1,2…比较,如果arr[0]>arr[x]时,我们就把这两个数互换下,依次类推一轮循环过后,可以arr[0]就选出为整个数组最小的数,第二轮我们重下标为1开始然后与下标为2,3…数相比,类似第一轮那样。

主要java算法:

for(int i=0,len= arr.length;i<len;i++){

for(int y=i+1;y<len;y++){

if(arr[i]>arr[y]){

swap(arr,i,y);

}

}

}

public static void  swap (int []arr,int i,int y){

int temp = arr[i];

arr[i] = arr[y];

arr[y] = temp;

}

上面的算法优化:

目的:减少数组中两数互换的数量,我们用量变量记住每一轮,最小的数和其下标;

public static void sort2(int []arr){

for(int i=0,len=arr.length;i<len;i++){

int num = arr[i];

int index = i;

for(int y=i+1;y<len;y++){

if(num>arr[y]){

num = arr[y];

index = y;

}

if(num != i)

swap (arr,i,index);

}

}

}

冒泡排序:

给大家分享下:快速排序、冒泡排序、二分查找_第2张图片

   步骤图形分解;

如图:从数组最后两位数开始比较,如果最后一个数小于倒数第二个数,我们就互换这个两个数,然后依次类图按照如上图步骤,第一轮下来后数组下标为0的就取到全数组最小的数;依次类推的方式,按照第二轮,第三轮步骤

关键算法代码:

public static void doBubbleSort(int []arr){

for(int i = 0,len = arr.length;i < len ; i++){

for (int j = len-1; j > i; j--) {

if(arr[j]<arr[j-1]){

swap(arr,j,j-1);

}

}

}

}

二分查找:

  前提:给我们的数组是有序的

给大家分享下:快速排序、冒泡排序、二分查找_第3张图片

步骤图解:

说明:我们查找46,第一次定义startend变量分别问0和数组长度,定义变量med=start+end/2;然后我们那46arr[med]比较,如果46>arr[med]时,我们把start=med+1;如上图,如果大于的话,我们把end = med-1;依次类推:可以算出第三轮后startmedend三根线重叠在一起;46=arr[med],这时候找到了,返回med

Java代码:

public static int search(int []arr,int num){

int start = 0;

int end = arr.length;

int med = 0;

while(start<end){

med = (start+end)/2;

if(num>arr[med]){

start = med+1;

}else if(num <arr[med]){

end = med-1;

}else{

return med;

}

}

return med;

}

你可能感兴趣的:(算法)