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=4

dec 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];  

}






阅读全文
0 0
原创粉丝点击