使用冒泡排序对一串数组进行排序并用二分查找找出某个数字下标
作者:互联网
目录
任务概述
使用冒泡排序对一串数组进行排序并用二分查找找出某个数字下标
1.创建数组nums{1,3,9,5,6,7,15,4,8};
2.对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找 6 并 输出排序后的下标;
相关概念
二分查找:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
算法要求:1.必须采用顺序存储结构。
2.必须按关键字大小有序排列。
冒泡排序:是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
冒泡排序算法的原理如下
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
3. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码
public class Day04_demo5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
/*对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找 6 并 输出排序后的下标*/
//冒泡排序及二分查找
//创建名为shuzu的数组
int shuzu [] = {1,3,9,5,6,7,15,4,8};
//定义变量a为过渡变量
int a;
//外层循环控制层数
//外层循环次数length-1
for (int i = 0; i < shuzu.length-1; i++)/*shuzu.length表示数组长度*/ {
//内层循环控制次数
//循环次数 length-i-1
for (int j = 0; j < shuzu.length-i-1; j++) {
//两两比较大小并循环
if (shuzu[j]>shuzu[j+1]) {
a = shuzu[j];
shuzu[j]=shuzu[j+1];
shuzu[j+1] = a;
}
}
}
//遍历排序好的数组并打印
for (int i = 0; i < shuzu.length; i++) {
System.out.print(shuzu[i]);
System.out.print(" ");
}
System.out.println();
//查找变量b在数组中的位置
int b =6;
//创建三个关键变量:最小下标,最大下标,中间下标
int minnum = 0;
int maxnum = shuzu.length-1;
int centernum = (minnum+maxnum)/2;
while (true) {
//查找的数大于中间下标对应的数
if (b>shuzu[centernum]) {
//重新定义最小下标
minnum = centernum+1;
}
//查找的数小于中间下标对应的数
else if (b<shuzu[centernum]) {
//重新定义最大下标
maxnum = centernum-1;
}
//查找的数等于中间下标对应的数
else {
break;
}
//所查找数不在数组中
if (minnum>maxnum) {
centernum = -1;
break;
}
//更新中间下标
centernum = (minnum+maxnum)/2;
}
System.out.println("位置"+centernum);
}
}
运行结果
标签:二分,下标,shuzu,冒泡排序,int,查找,centernum,排序 来源: https://blog.csdn.net/blackmores/article/details/113479478