javaseday04(数组容器,排序,进制转换)
来源:互联网 发布:c语言boolean的用法 编辑:程序博客网 时间:2024/06/06 06:31
int [] arr= new int[3]; 需要一个容器但是不明确容器的具体数值
int[] arr = new int[]{121,12,12}; 常规初始化 //元素类型[] 数组名 = new 元素类型[]{}; 需要一个容器存储已知的具体数据
创建数组的同时指导数组上每个角标的元素 注意不用指定长度
int [] arr = {21,32,21}; 静态初始化
数据多用数组面对一个组 类似一个班的班长
容器很重要 数组就是一个容器 能装很多数据
对数组操作最基本的动作就是存和取, 核心思想就是对角标(索引)操作
数组最大的角标是数组长度-1 arr.length
syso("arr["+x+"]"+arr[x]+";"); 反向遍历可以通过改变初始值
获取数组中的最大值
1、需要进行比较并定义变量记录每次比较后较大的值
2、对数组中的元素进行遍历取出,和变量中记录的元素进行比较如果遍历到的元素大于变量中记录的元素,就用变量记录该较大的值
3、遍历结束,该变量记录的就是最大值
注意求最值的时候 max=0 中取负数中的最大值可能 0就是最大的 所以定义的时候max直接定义数组中的数比如arr[0] 然后for循环的初始化可以定义为1 返回maxElement
不过因为角标都正数可以定义max=0不过要通过赋予索引值 然后返回 arr[maxIndex]
int maxIndex = 0;
for(int x=1; x<arr.length;x++){
if(arr.[x]>arr[maxIndex]){
maxIndex=x;
}
return arr[maxIndex];
}
选择排序 通过角标进行比较把第0个角标和另外的角标一个个比较交换出最小的值存在角标0的地方(比的方式看存的地方) 外圈条件表达式的arr.length 因为不需要比较所以减1(已经遍历完了).内圈的初始条件比外圈大1因为和下一个角标比较 同时加个第三方变量
for(int x =0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
int temp =arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
}
不用返回数组 因为针对同一个数组 排序完数组已经改变完了 原来指向的地址已经改变 不用返回
冒泡排序 相邻2个相比 先弄出最大的值
for(int x= 0; x<arr.length-1;x++){
for(int y=0;y<arr.length-1-x;y++){ //-1为了防止角标越界 -x 是为了外循环增加一次内循环参数与比较的元素个数递减
if(arr[y]>arr[y+1]){
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1]=temp;
}
}
}
希尔排序最快 位运算符 3重for循环
swap 要转入3个参数 其中有 数组 因为要操作数组才有用 仅仅是角标没啥用
public static void swap(int[] arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
排序中可以加2个变量来提高数组的性能
for(int x=0; x<arr.length;x++){
int num = arr[x];
int index = x;
for(int y=x+1;y<arr.length;y++){
if(num>arr[y]){
num=arr[y];
index=y;
}
}
if(index!=x)
swap(arr,x,index);
}
如果没有返回值可以返回-1 因为数组中从0开始没有-1
public static int getIndex(int[] arr, int key){
for(int x=0;x<arr.length;x++){
if(arr[x]==key){注意2个等号
return x;
}
}return -1;
}
二分查找法 ( 折半查找法)
7/2=3
查找的前提数字必须有序
public static int selfSearch(int[] arr,int key){
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(arr[mid]!=key){
if(arr[mid]>key){
max=mid-1;
}else if(arr[mid]<key){
min=mid+1;
}if(max<min)){
return -1;
}
mid=(min+max)/2;
}return mid;
}
public static int selfSearch2(int[] arr,int key){
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(min<=max){
mid=(min+max)>>1;
if(arr[mid]>key){
max=mid-1;
}else if(arr[mid]<key){
min=mid+1;
}else
return mid;
}
}return -1;
}
折半不能先排序 否则会导致角标异常
如果是有序的数组 折半快
java中 也可用Arrays.binarySearch 如果数不存在返回 (插入点)负数-1 如果不减1的话 可能返回0表示存在 为了区分
&上00001111 (15)取得最低四位
后用>>>4向右移4位
public static void toHex(int num){
for(int x = 0;x<8;x++){
int temp = num&15;
if(temp>9){
syso((char)(temp-10+'A')); 还要注意强转
}else{
syso(temp);
}
num=num>>>4;
}
}
如果数据出现对应关系而且对应关系的一方是有序的数字编号,并作为角标使用,这时就必须要想到数组的使用
比如 0,1,2,3,4,5,6,7,8,9,A, B,C,D, E, F
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
根据运算的结果作为角标直接去查数组中对应的元素即可
这种方式被称为查表法
public static void toHex_1(int num){
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
for(int x = 0;x<8;x++){
int temp = num&15;
syso(chs[temp]);
num=num>>>4;
}
}
查表查到比较多的数据,数据多了就存进去在进行操作。所以定义一个数组(临时容器)
public static void toHex_2(int num){
if(num==0){
syso("0");
return;
}
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr = new char[8];
int pos = arr.length;
while(num!=0){
int temp = num&15;
arr[--pos]=chs[temp];
num=num>>>4;
}
syso("pos="+pos);
for(int x= pos; x<arr.length;x++){
syso(arr[x]);
}
}
二进制与1与 右移1位
八进制与7与 右移3位
public static void toHex_2(int num,int base,int offset){
if(num==0){
syso("0");
return;
}
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr = new char[8];
int pos = arr.length;
while(num!=0){
int temp = num&base;
arr[--pos]=chs[temp];
num=num>>>offset;
}
syso("pos="+pos);
for(int x= pos; x<arr.length;x++){
syso(arr[x]);
}
}
dec to hex base=15 offset=4dec to bin base=1 offset =1
dec to oct base=7 offset=3
Integer.toBinaryString转化为二进制
外国第一个是星期日
public static String getWeek(int num ){ 表的一种简单应用
if(num>7 || num<1){加入健壮性判断 健康强壮
return "错误的 ";
}
String[] weeks = {"","星期一","星期二","","","","",};
return weeks[num];
}
- javaseday04(数组容器,排序,进制转换)
- 容器转换成为指定数组
- 【容器转换成为指定数组】
- java 容器、数组相互转换
- 黑马程序员------数组(排序、查询、进制转换)
- 黑马程序员-数组的排序、查找、进制转换
- java for特殊用法 数组排序 进制转换
- 数组和容器的排序
- java/数组排序/冒泡排序/选择排序/二分查找/Arrays/进制转换/装箱/拆箱/
- 容器和数组 数组和容器之间转换
- day04,数组的操作,遍历,查找,选择冒泡排序,进制转换,二维数组
- 函数_内存结构_数组_排序_选择排序_冒泡排序_折半查找_插入排序_进制转换数组
- 数组进制转换
- Java基础04天 学习笔记_数组进阶(数组排序,二分查找,进制转换,二维数组)
- java中数组和容器的转换
- 数组和容器之间的转换
- hdu1877-进制转换问题 vector容器
- hdu2031-进制转换问题 vector容器
- Problem 16 Power digit sum
- AR 广告大屏UI界面搭建二
- 可爱小仓鼠代码,放在网页里很可爱
- ORA-00838: Specified value of MEMORY_TARGET is too small
- 微信小程序中点击View中任何位置都可以触发相应事件的解决办法
- javaseday04(数组容器,排序,进制转换)
- 百练_4085:数组去重排序
- select、poll以及epoll三组I/O复用函数的区别
- mysqli_result 类中的成员方法和属性
- Handler消息处理机制---从源码分析
- WIFI 一键配置原理-ESP8266
- Android EditText 限制输入类型数字或小数,并且小数位数限定为两位
- c++重载构造函数时应注意的几点
- windows安装memcached_服务器端