------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1.排序:
1).冒泡排序;将每个元素取出,跟相邻的元素进行比较,如果从小到大排序,判断当前元素如果大于相邻元素,则进行交换
for(int i = 0; i < arr.length ; 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;
}
}
for(int i = 0;i < arr.length ; i++){
System.out.println(arr[i]);//遍历输出
}
2).选择排序:从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
A:判断后立即交换
for(int i = 0;i < arr.length - 1 ; i++){
for(int j = i ; j < arr.length ; j++){
//判断如果i > j的数,就交换
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
B:判断后将索引记录下来,之后再交换;效率高;
for(int i = 0;i < arr.length - 1 ;i ++){
//思路:找最小的数,然后把最小数的索引记录下来,最后再进行交换
int minIndex = i;//假设第一个数就是最小的,将索引记录下来
for(int j = i + 1; j < arr.length ; j++){
if(arr[minIndex] > arr[j]){
//不交换,把索引记录下来
minIndex = j;
}
}
//内部的j循环一结束,minIndex记录的就是最小数的索引
if(minIndex != i){//有其它更小的数,执行交换
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
2.查找:
1).二分查找:
public class Demo {
public static void main(String[] args) {
int[] arr = {2,3,6,6,78,88,99};
//二分查找实现:
int start = 0;
int end = arr.length - 1;
int mid = (start + end) / 2;
int num = 88;
while(end >= start){
System.out.println("循环一次:");
if(num > arr[mid]){
//向右走
start = mid + 1;
}
if(num < arr[mid]){
//向左走
end = mid - 1;
}
if(num == arr[mid]){
//找到了
System.out.println("二分查找找到:" + mid);
break;
}
//改变一下mid的值
mid = (start + end) / 2;
}
}
}