【选择排序】
从小到大排序
19 ,34,13,109,11,56
第一次循环的结果是
11,34,19,109,13,56
第二轮循环:从34开始
原理一样
代码示例:
for(int i=0;i<arr.length-1;i++){
for(int j=1;j<arr.length;i++){
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
选择排序首先得到的是最小值
【冒泡排序】
概念:
下标为x与下标为x+1两两对比,如果arr[x]>a[x+1](arr[x]<a[x+1]),那么就调换位置
11,34,3,190,89,65
从小到大排序
第一轮:
11<34 不用动
34>3 调换位置 11,3,34,190,89,65
34<190 不用动
190>89 调换位置 11,3,34,89,190,65
190>65 调换位置 11,3,34,89,65,190
冒泡排序首先得到的是最大值
代码:
for(int x=0;i<arr.length-1;i++){
for(int y=0;arr.length-1;y++){
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
优化
for(int x=0;i<arr.length-1;i++){
for(int y=0;y<arr.length-1-x;y++){
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
-1:为了避免下标越界
-x:减少循环次数
另一种写法
for(int x=arr.length-1;i>0;i--){
for(int y=0;y<x;y++){
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
开发中用的是java封装好的排序类与方法 Arrays.sort(arr)
【查找】
public static int getIndex(int[]arr,int key){
for(int x=0;a<arr.length;x++){
if(arr[x]==key){
return x;
}
return -1;
}
}
【折半查找】
前提:必须是已经排序的数组
原理:找一个数从数组中间开始找,如果大(或小)了,就往左(或右)找,再取中间的值,再比。。
代码示例:
/**
*查找的数组,key要找的值
*/
private static int halfSearch(int []arr,int key){
int min,mid,max
min=0;
max=arr.length-1;
mid=(min+max)/2
while(arr[min]!=key){
if(key>arr[mid])min=mid+1;
else if(key<arr[mid])max=mid-1;
if(max<min)
return -1;
mid=(min+max)/2
}
return mid;
}
另一种写法:
public static int halfSearch_2(int []arr,int key){
int min,mid,max;
min=0;
max=arr.length-1;
mid=(min+max)/2
while(min<=max){
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return -1;
}
java API中封装的折半查找 Arrays.binarySearch(arr,key);
概念:挨个比首先得出最小(最大值),接着得到第二最小值(最大值)
例:从小到大排序
19 ,34,13,109,11,56
过程:
19<34 不用动
19>13 调换位置 13,34,19,109,11,5613<109 不用动
13>11 调换位置 11,34,19,109,13,56
13<109 不用动第一次循环的结果是
11,34,19,109,13,56
第二轮循环:从34开始
原理一样
代码示例:
for(int i=0;i<arr.length-1;i++){
for(int j=1;j<arr.length;i++){
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
选择排序首先得到的是最小值
【冒泡排序】
概念:
下标为x与下标为x+1两两对比,如果arr[x]>a[x+1](arr[x]<a[x+1]),那么就调换位置
11,34,3,190,89,65
从小到大排序
第一轮:
11<34 不用动
34>3 调换位置 11,3,34,190,89,65
34<190 不用动
190>89 调换位置 11,3,34,89,190,65
190>65 调换位置 11,3,34,89,65,190
第二轮对比 还是从11开始比,但是190不用参与比较了
冒泡排序首先得到的是最大值
代码:
for(int x=0;i<arr.length-1;i++){
for(int y=0;arr.length-1;y++){
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
优化
for(int x=0;i<arr.length-1;i++){
for(int y=0;y<arr.length-1-x;y++){
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
-1:为了避免下标越界
-x:减少循环次数
另一种写法
for(int x=arr.length-1;i>0;i--){
for(int y=0;y<x;y++){
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
开发中用的是java封装好的排序类与方法 Arrays.sort(arr)
【查找】
public static int getIndex(int[]arr,int key){
for(int x=0;a<arr.length;x++){
if(arr[x]==key){
return x;
}
return -1;
}
}
【折半查找】
前提:必须是已经排序的数组
原理:找一个数从数组中间开始找,如果大(或小)了,就往左(或右)找,再取中间的值,再比。。
代码示例:
/**
*查找的数组,key要找的值
*/
private static int halfSearch(int []arr,int key){
int min,mid,max
min=0;
max=arr.length-1;
mid=(min+max)/2
while(arr[min]!=key){
if(key>arr[mid])min=mid+1;
else if(key<arr[mid])max=mid-1;
if(max<min)
return -1;
mid=(min+max)/2
}
return mid;
}
另一种写法:
public static int halfSearch_2(int []arr,int key){
int min,mid,max;
min=0;
max=arr.length-1;
mid=(min+max)/2
while(min<=max){
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return -1;
}
java API中封装的折半查找 Arrays.binarySearch(arr,key);