Java序谈之数组排序(冒泡、选择、二分查找)
来源:互联网 发布:道路测量员软件说明书 编辑:程序博客网 时间:2024/05/18 18:16
数组
定义一维数组和二维数组以及多维数组
一维:int [ ] array = new int [ ]; int [ ] array = { }; int [ ] array = new int [ ] { };这种书写不可填入数组元素数目
二维:int [ ] [ ] array = new int [ ] [ ] ; int [ ] [ ] array = { { },{ },{ } }; int [ ] [ ] array = new int [ ] [ ]{ { }, { },{ }};也不能写数组元素数目
根据索引找数组中的元素
需求:能够根据用户输入的1,返回一,输入的2,返回二
思路:已有的条件(索引,数组),直接利用数组元素输出语句求出数组中对应元素
代码实现:
public static char fanhui(int a) {char []print= {'一','二','三','四','五','六','七'};return print[a-1];}
根据提供的数组中元素找出索引
需求:有数组 int [ ] array={1,2,3,4},求出3在数组中的角标位置
分析:可以将这个功能封装成一个函数,输入数组和要查找的元素作为参数即可查找
代码实现:
public static int weizhi(int n,int []a) {//定义一个变量,index保存下标//如果索引的初值为零,当数组的长度为零的时候,会直接返回零,会与数组真正的下标零混淆int index = -1;for(int x=0;x<a.length;x++) {if(a[x] == n) {index = x;return index;//return x :这里已经把值返回了,结束整个函数,后面不管写什么都没有意义,跟break、continue差不多}}return index;}
小结:代码中 int index = -1;return index;可以防止出现空数组的情况
数组自身元素的反转
需求:int [ ] array={1,4,2,5,3,,6};实现这个数组的反转
分析:可以取数组长度的中间值,然后以这个中间值为条件,在For循环中将数组进行反转
public static void change(int[] array) {int number = array.length / 2;for (int x = 0; x < number; x++) { int c; c = array[x]; array[x] = array[array.length - 1 - x]; array[array.length - x - 1] = c;//此时在调用函数的时候,相当于值的传递,这样交换不了两个数的值(不同空间中没关系)//kk(array[x], array[array.length - 1 - x]);}System.out.println(Arrays.toString(array));}
小结:在这里交换两个数值的时候,不可以调用一个封装这个功能的函数,因为两个函数是栈中不同的空间,另一个函数中数值的交换对于另一个函数没有影响
数组的冒泡排序
定义:数组中相邻的两个元素之间进行比较
核心:相邻的元素进行比较
分析:冒泡排序的结果是升序,每趟得出最后位的最大值,可以使用外循环控制比较的趟数,内循环控制每趟比较的次数
代码实现:
public static void sort(int []a) {for(int x = 0; x < a.length-1; x++) {for( int y = 0; y<a.length-1-x; y++) {if( a[y] > a[y+1] ) {int c = a[y];a[ y ] = a[y+1];a[ y + 1] = c;}}}}
分析:外循环中:数组的第一个数不用跟自己比较,所以比较次数为x=a.length-1
内循环中:-1:当不加-1的时候,a[ y ]可以取到a.length-1,那么a[y+1]=a.length,就会溢出报错
-x:每趟循环的次数在减少,减少的值正好是每次外循环的x的大小
数组的选择排序
定义:数组的每个元素跟之后的每个元素进行比较
分析:选择排序是升序,每次循环可得到首个位置的最小值,使用外循环控制循环躺数,内循环控制每趟比较次数
代码实现:
public static void main(String[] args) {int []num= {1,3,4,32,2,43,5};//x<num.length-1 外循环最后一个数不用再比较了for(int x = 0; x<num.length-1; x++) {//y=x+1 每次都可以少比一个数for(int y=x+1;y<num.length;y++) {if(num[x]<num[y]) {int c=num[x];num[x]=num[y];num[y]=c;}}}System.out.println(Arrays.toString(num));}小结:外循环中:-1:最后一个数不用跟自己比较,所以比较次数是 x=num.length-1
内循环中:x+1:每次内循环都是从比较元素后面的一个元素依次向后比较
数组的折半查找
定义:给定一个数,在数组查找,通过不断跟数组中间角标所属数值进行比较,缩小范围,更快得出结果。
实现代码:
int min = 0;int max = array.length-1 ;int mid = (max + min) / 2;//声明要查找的值int key = 11;//循环查找,循环体里要有折半的操作//为什么使用while循环?因为我现在已经明确知道循环什么时候停止//key和中间角标的值比较,如果相等循环停止while(key != array[mid]) {if(key > array[mid]) {min = mid + 1;}else if(key < array[mid]) {max = mid-1;}//重复折半的操作//最终正好是max=min,这时候得到那个角标mid = ( max+min )/2;//如果数组中没有这个数,会造成死循环,需要一个出口让程序停止if(min>max) {//说明这里没找到这个数mid = -1;//相当于给了一个标志break;}}System.out.println("坐标"+mid);
二维数组
命名规范: int [ ] [ ] array = new int [x ] [y ]; int [ ] [ ] array={ { },{ },{ }};
以上命名方式一种:x:代表二维数组种一维数组个数 y:代表每个一维数组中元素个数
需求:遍历二维数组
代码实现:
System.out.println(array1.length);//二位数组的长度是一维数组的个数for(int x=0; x<array1.length; x++) {for(int y= 0 ; y < array1[x].length; y++){System.out.print(array1[x][y] + " ");}System.out.println();}
- Java序谈之数组排序(冒泡、选择、二分查找)
- Java 冒泡排序,选择排序,二分查找
- Java--冒泡、选择排序,二分查找
- Java-冒泡,选择排序,二分查找算法
- java/数组排序/冒泡排序/选择排序/二分查找/Arrays/进制转换/装箱/拆箱/
- Java数组遍历、求最大值、选择排序、冒泡排序、二分查找
- Java数据结构算法之选择排序、插入排序、冒泡排序、二分查找
- PHP 数组排序(冒泡排序、选择排序);数组查找(顺序查找、二分查找)
- java实现的选择排序、冒泡排序、二分查找
- java的 最大值 选择排序 冒泡排序 二分查找
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- Java冒泡,快速,插入,选择排序^_^+二分算法查找
- java冒泡,选择排序及折半(二分)查找
- 冒泡排序、选择排序、二分查找法
- 选择排序 冒泡排序 二分查找
- 冒泡排序,选择排序,二分查找小结
- Week02_day01 选择排序 冒泡排序 二分查找
- SSH框架--struts2浅析《二》之配置文件
- 软件工程的开发过程
- POJ 2499 Binary Tree
- java产生随机数的几种方式
- CFgym:Glyph Recognition(计算几何)
- Java序谈之数组排序(冒泡、选择、二分查找)
- Java返回值-类、抽象类、接口
- 让你不再害怕指针
- 8.5 日期的格式化(不同区域的星期格式)
- gedit给launch文件添加高亮
- 深入探讨在集群环境中使用 EhCache 缓存系统
- iOS App 稳定性指标及监测
- hadoop40
- 17.12.01,web学习第十六天,还有一年,努力吧青年cookie和session