排序、查找

一、冒泡排序

将每个数字与相邻的下一个数字进行比较,如果当前数字大于相邻的下一个数字,就交换

/*

 * 冒泡排序的原理:

 *

 * 将每个数字与相邻的下一个数字进行比较,如果当前数字大于相邻的下一个数字,就交换;

 */

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 + " 没找到");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值