前言
介绍数组的一些基本问题,冒泡排序和二分查找的原理,并且有其对应的编程
一、数组及其一些基本操作
二、冒泡排序口诀
三、二分查找原理
四、五个程序
1、查找某个整数
定义一个长度为10的整型数组nums,循环输入10个整数。然后将输 入一个整数,查找此整数,找到输出下标,没找到给出提示。
public static void main(String[] args) {
int [] nums = {22,33,44,55,66,78,79,80,88,99};//定义数组
int num = 77;//目标数
int min = 0;//最小下标
int max = nums.length;//最大下标
int center = (min+max)/2;//中间下标
while(true) {
//移动最小指针
if(num>nums[center]) {
min=center+1;
center=(min+max)/2;
//移动最大指针
}else if(num<nums[center]) {
max=center-1;
center=(min+max)/2;
}else {//取得目标数的下标
System.out.println(center);
break;
}
if(min>max) {
System.out.println("该数不在此数组内");
break;
}
}
}
结果
2、找出数组最值
public static void main(String[] args) {
int [] nums = {43,54,65,54,32,76,87,65,86,434};
int a = nums[0];
int b = nums[0];
for(int i = 0; i<nums.length;i++) {//遍历
a=a>nums[i]?a:nums[i];//找出最大值
b=b<nums[i]?b:nums[i];//找出最小值
}
System.out.println(a);
System.out.println(b);
}
结果
3、找出两数之和的目标值
public static void main(String[] args) {
int [] nums = {15,25,45,14};
int i=0;
int j=3;
int target = 60;
//遍历
for(i=0;i<4;i++) {
for(j=3;j>i;j--) {
if(nums[i]+nums[j]==target) {//判断是否等于目标值
System.out.println(i);//打印
System.out.println(j);
}
}
}
4、排序并查找
public static void main(String[] args) {
//先冒泡排序
int [] nums = {1,3,9,5,6,7,15,4,8};
int temp;
for(int i=0;i<nums.length-1;i++) {//循环次数
for(int j=0;j<nums.length-i-1;j++) {//交换次数
//交换最大值
if(nums[j]>nums[j+1]) {
temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
//二分查找
int num = 6;
int min = 0;
int max = nums.length;
int center = (min+max)/2;//中间下标
while(true) {
//左指针右移
if(num>nums[center]) {
min=center+1;
center=(min+max)/2;
//右指针左移
}else if(num<nums[center]) {
max=center-1;
center=(min+max)/2;
}else {
System.out.println(center);
break;
}
if(min>max) {
System.out.println("该数不在此数组内");
break;
}
}
}
5、移动零
public static void main(String[] args) {
//先冒泡排序
int [] nums = {1,0,0,5,0,7,15,4,8};
int temp;
for(int i=0;i<nums.length-1;i++) {
for(int j=0;j<nums.length-i-1;j++) {
if(nums[j]>nums[j+1]) {
temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
//移动前三位
for(int k=0;k<3;k++) {
temp=nums[k];
nums[k]=nums[nums.length-1-k];
nums[nums.length-1-k]=temp;
}
//移动后三位
for(int k=0;k<3;k++) {
temp=nums[k];
nums[k]=nums[nums.length-4-k];
nums[nums.length-4-k]=temp;
}
temp=nums[0];
nums[0]=nums[2];
nums[2]=temp;
for(int k=0;k<9;k++) {
System.out.println(nums[k]);
}
}
总结
提示:以上就是今天要讲的内容,本文仅仅简单介绍了一维数组的冒泡和二分查找,后续的话可以用Arrays关键字来对数组进行操作。