一、冒泡排序
将每个数字与相邻的下一个数字进行比较,如果当前数字大于相邻的下一个数字,就交换
/*
* 冒泡排序的原理:
*
* 将每个数字与相邻的下一个数字进行比较,如果当前数字大于相邻的下一个数字,就交换;
*/
publicclass Demo {
publicstatic void main(String[] args) {
int[]intArray = {88,65,78,42,20,324,32,54,365,324,25,87867,76,87,98,7643,5,36,5476};
for(int i = 0 ; i < intArray.length - 1 ; i++){//外层循环控制循环次数
for(int j = 0 ; j < intArray.length - 1 - i ;j++){//内层循环用于取数和判断
if(intArray[ j ] > intArray[ j + 1 ] ) {
//交换
inttemp = intArray[j];
intArray[j]= intArray[j + 1];
intArray[j+ 1] = temp;
}
}
}
//循环结束后,数组的顺序将发生改变;
for(inti = 0;i < intArray.length ; i++){
System.out.println(intArray[i]);
}
}
}
二、选择排序
将每个数,和它之后的所有数全部比较一次
/*
* 选择排序:
*
* 将每个数,和它之后的所有数全部比较一次。
*/
publicclass Demo {
publicstatic void main(String[] args) {
int[]array = {85,64,78,32,5};
for(inti = 0 ; i < array.length - 1 ; i ++){
for(intj = i + 1 ; j < array.length ; j++){
if ( array[i] > array[j] ){//交换
inttemp = array[i];
array[i]= array[j];
array[j]= temp;
}
}
}
//排序后遍历
for(inti = 0;i < array.length ; i++){
System.out.println(array[i]);
}
}
}
三、二分查找
查找的数组一定要是有序的
/*
* 二分查找:
* 注意:查找的数组一定要是有序的。
*/
publicclass Demo {
publicstatic void main(String[] args) {
int[]array = {1,3,5,88,99,102,203,345,456};
intnum = 457;
int start = 0;//最小索引
int end = array.length - 1;//最大索引
int mid = (start + end) / 2;//中间的索引
//定义一个标记
boolean flag = false;//初始值为false,表示为没找到;
while(start<= end){
if( num < array [ mid ] ){//往左走
end= mid - 1;
} else if( num > array [ mid ] ){//往右走
start= mid + 1;
}else{
flag= true;
// System.out.println("找到:索引:" + mid);
break;
}
mid= (start + end) / 2;
}
//如果代码到这里,有两种情况到这里:1.找到:break到这里;2.没找到,但循环结束;
//我们就是要判断出是那种情况:
//特征:
//1.如果start大于end,没找到,到达这里;
//2.添加标记
if(flag){
System.out.println("找到数字:" + num + ",索引为:" +mid);
}else{
System.out.println("数字:" + num + " 没找到");
}
}
}