/*
给定一个数组{4,5,3,2,1,6}
需求:获取元素中的最大值与最小值;
思路:
1:要获取元素中的最大值,可以通过遍历的方式.
2:获取最值需要比较,每一次比较都会有一个较大的值,因为该值不确定,
用一个变量临时存储.
3:让数组所有的元素都和该值比较,如果大于该变量的值,就用该变量记录较大的值.
4:当所有的元素比较完成,那么该变量存储的就是最大的值了.
步骤:
1:定义变量,初始化数组中的任何一个元素即可.
2:通过循环语句对数组进行遍历.
3:在变量过程中定义判断语句,如果遍历到的元素比变量中的元素大,那么就赋值给该变量.
需要定义一个功能,以便提高复用性.
1'明确结果:数组中最大的元素,int.
2,未知内容:一个int[].
*/
class HanShu_Test {
public static void main(String[] args) {
int[] arr ={4,5,3,2,1,6};
bubbleSort(arr);
//selectSort(arr);
printArray(arr);
//int min = getMin(arr);
//int max = getMax_2(arr);
//System.out.println("max="+max);
//System.out.println("min="+min);
}
public static int getMax(int[] arr) {//传入一个int[] arr的数组.
int max = arr[0];//定义一个变量.
for(int x =1; x<arr.length; x++) {
if(arr[x]>max)
max = arr[x];
}
return max;
}
/*
获取最值的另一种方式,是不是可以把临时变量初始化为0呢?
可以,这种方式其实是在初始化数组中的角标.
*/
public static int getMax_2(int[] arr) {
int max = 0;//初始化数组中的角标
for (int x =1; x<arr.length; x++) {
if(arr[x]>arr[max])
max = x;
}
return arr[max];
}
//获取最小值
public static int getMin(int[] arr) {
int min = 0;
for (int x =1 ;x<arr.length; x++){
if(arr[x]<arr[min])
min = x;
}
return arr[min];
}
//选择排序
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]) {
/*int temp = arr[x];//定义一个变量进行元素换位置操作
arr[x] = arr[y];
arr[y] = temp;*/
swap(arr,x,y);
}
}
}
}
//冒泡排序
public static void bubbleSort(int[] arr) {
for (int x =0;x<arr.length-1 ; x++) {
for (int y = 0; y<arr.length-x-1; y++) {//-x:让每一次比较的元素减少,-1:避免角标越界.
if (arr[y]>arr[y+1]) {
/*int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;*/
swap (arr,y,y+1);
}
}
}
}
/*
发现无论什么排序都需要对满足条件的元素进行位置的置换.
所以可以把这部分相同的部分提取出来,单独分装一个功能.
*/
public static void swap(int[] arr,int a,int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void printArray(int[] arr) {//定义一个功能打印数组中的元素.
System.out.print("[");//给数组加上一对[]
for (int x =0;x<arr.length ; x++) {
if (x!=arr.length-1) //定义一个if语句如果x不等于数组中的最后一个元素那么就执行下面的输出语句.
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]");
}
}
}
|
|