特殊时期,大家一定要保重身体。增强自身免疫力,一切都会过去,一起加油!!!

Java入门学习–JavaSE05数组更多格式及相关排序算法

Java zchao 301℃ 0评论

数组的定义格式和排序法算介绍

1.数组定义格式

class ArrayDemo3
{
public static void main(String[] args)
{
//格式1
/*
需要一个容器,但是不明确容器的具体数据。
*/
// int[] arr = new int[3];

 

/*
需要一个容器,存储已知的具体数据。
*/
//元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
// int[] arr = new int[]{89,34,270,17};
int[] arr = {89,34,270,17};

/*
对数组操作最基本的动作就是存和取。
核心思想:就是对角标的操作。

*/

System.out.println(“length:”+arr.length);
for(int x=0; x<arr.length ; x++)
{
System.out.println(“arr[“+x+”] = “+arr[x]+”;”);//arr[0] = 89;
}

for(int x=arr.length-1; x>=0; x–)
{
System.out.println(“arr[“+x+”] = “+arr[x]+”;”);//arr[0] = 89;
}
// System.out.println(arr[1]);
// System.out.println(arr[2]);
// System.out.println(arr[3]);

 

 

}
}

 

2.遍历数组及相关排序算法

import java.util.*;

class ArrayDemo4
{

//遍历数组的功能。
public static void printArray(int[] arr)
{
System.out.print(“[“);
for(int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+”, “);
else
System.out.println(arr[x]+”]”);
}
}
public static void main(String[] args)
{
int[] arr = {34,19,11,109,3,56};

// int max = getMax_2(arr);
// System.out.println(“max=”+max);

printArray(arr);

// selectSort(arr);
// bubbleSort(arr);
// Arrays.sort(arr);
selectSort_2(arr);

printArray(arr);
}

public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
/*
冒泡排序
*/
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=0; y<arr.length-1-x; y++)
{
if(arr[y]>arr[y+1])
{
swap(arr,y,y+1);
/*
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
*/
}
}
}
}

/*
选择排序
*/
public static void selectSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
{
swap(arr,x,y);
/*
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
*/
}
}
}
}

public static void selectSort_2(int[] arr)
{
for(int x=0; x<arr.length-1; 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,需要进行比较。并定义变量记录住每次比较后较大的值。
2,对数组中的元素进行遍历取出,和变量中记录的元素进行比较。
如果遍历到的元素大于变量中记录的元素,就用变量记录住该大的值。
3,遍历结果,该变量记录就是最大值。

定义一个功能来是实现。
明确一,结果。
是数组中的元素。int .
明确二,未知内容。
数组.
*/
public static int getMax(int[] arr)
{
//定义变量记录较大的值。
int maxElement = arr[0];//初始化为数组中的任意一个元素。
for(int x=1; x<arr.length; x++)
{
if(arr[x]>maxElement)
maxElement = arr[x];
}
return maxElement;
}
public static int getMax_2(int[] arr)
{
//定义变量记录较大的值。
int maxIndex = 0;//初始化为数组中任意一个角标。
for(int x=1; x<arr.length; x++)
{
if(arr[x]>arr[maxIndex])
maxIndex = x;
}
return arr[maxIndex];
}
}

 

3.数组试题1

import java.util.*;
/*
面试题:
给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,
那么个元素的存储的角标为如何获取。
{13,15,19,28,33,45,78,106};
*/
class ArrayDemo5
{
public static void main(String[] args)
{
//
// int[] arr = {4,1,8,7,3,8,2};
int[] arr = {13,15,19,28,33,45,78,106};
int index = halfSearch_2(arr,5);
System.out.println(“index=”+index);

int index1 = Arrays.binarySearch(arr,5);//如果存在返回的具体的角标位置,不存在返回的是 -插入点-1
System.out.println(“index1=”+index1);
}
/*
二分查找法

*/
public static int halfSearch(int[] arr,int key)
{
int max,min,mid;
min = 0;
max = arr.length-1;
mid = (max+min)/2;

while(arr[mid]!=key)
{
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid – 1;

if(max<min)
return -1;

mid = (max+min)/2;
}
return mid;

}

public static int halfSearch_2(int[] arr,int key)
{
int max,min,mid;
min = 0;
max = arr.length-1;

while(min<=max)
{
mid = (max+min)>>1;

if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid – 1;
else
return mid;
}
return -min-1;
}

 

/*
数组常见功能:查找。
*/
public static int getIndex(int[] arr,int key)
{
for(int x=0; x<arr.length; x++)
{
if(arr[x]==key)
return x;
}
return -1;
}
}

 

4.数组试题2给定一个数组,对其进行反转

/*
给定一个数组,对其进行反转。

{3,1,6,5,8,2} –>
{2,8,5,6,1,3};

其实就是头尾元素的位置置换。

*/

 

class ArrayTest
{
public static void printArray(int[] arr)
{
System.out.print(“[“);
for(int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+”, “);
else
System.out.println(arr[x]+”]”);
}
}
public static void main(String[] args)
{
int[] arr = {4,1,8,7,3,8,2};
printArray(arr);
reverseArray(arr);
printArray(arr);
}

public static void reverseArray(int[] arr)
{
for(int start=0,end=arr.length-1; start<end; start++,end–)
{
swap(arr,start,end);
}
}
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}

5.数组试题3获取一个整数的16进制表现形式

 

/*
获取一个整数的16进制表现形式。
*/

class ArrayTest2
{
public static void main(String[] args)
{
toHex_2(0);
}

// 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_2(int num)
{

if(num==0)
{
System.out.println(“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;
}

System.out.println(“pos=”+pos);
for(int x=pos ;x<arr.length; x++)
{
System.out.print(arr[x]);
}

 

}

 

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;
System.out.print(chs[temp]);
num = num >>> 4;
}

}

public static void toHex(int num)
{

for(int x=0; x<8; x++)
{
int temp = num & 15;
if(temp>9)
System.out.print((char)(temp-10+’A’));
else
System.out.print(temp);
num = num >>> 4;
}
/*
int n1 = num & 15;
System.out.println(“n1=”+n1);

num = num >>> 4;
int n2 = num & 15;
System.out.println(“n2=”+n2);
*/
}
}

6.数组试题4

class ArrayTest3
{
public static void main(String[] args)
{
// toHex(26);
toBinary(-6);
// toOctal(26);
System.out.println(Integer.toBinaryString(-6));
}

//十进制–>十六进制。
public static void toHex(int num)
{
trans(num,15,4);
}
//十进制–>二进制。
public static void toBinary(int num)
{
trans(num,1,1);
}
//十进制–>八进制。
public static void toOctal(int num)
{
trans(num,7,3);
}

public static void trans(int num,int base,int offset)
{

if(num==0)
{
System.out.println(“0”);
return ;
}
//定义一个对应关系表。
char[] chs = {‘0′,’1′,’2′,’3’,
‘4’,’5′,’6′,’7′,
‘8’,’9′,’A’,’B’,
‘C’,’D’,’E’,’F’};
/*
一会查表会查到比较的数据。
数据一多,就先存储起来,在进行操作。
所以定义一个数组。 临时容器。
*/
char[] arr = new char[32];
int pos = arr.length;

while(num!=0)
{
int temp = num & base;
arr[–pos] = chs[temp];
num = num >>> offset;
}

for(int x=pos ;x<arr.length; x++)
{
System.out.print(arr[x]);
}
System.out.println();

}

}

7.数组试题5

class ArrayTest4
{
public static void main(String[] args)
{
String week = getWeek(71);
System.out.println(week);
}
/*
使用查表法。
星期。
String s = “abc”;
int x = 4;
*/
public static String getWeek(int num)
{

if(num>7 || num<1)
{
return “错误的星期”;
}
String[] weeks = {“”,”星期一”,”星期二”,”星期三”,”星期四”,”星期五”,”星期六”,”星期日”};

return weeks[num];
}

}

 

转载请注明:zchao博客之家 » Java入门学习–JavaSE05数组更多格式及相关排序算法

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!