javase学习第12天(数组排序及元素查找)

数组排序元素查找

对数组排序最常用的是冒泡排序和选择排序:冒泡排序是每次将最大值都放在当前下标范围的最大下标处;选择排序就是每次都从前往后依次拿一个元素和其后面的所有元素比,来确定当前位置的元素。

冒泡排序

相邻元素两两比较,大的往后放,第一次完毕,最大值出现了最大索引出(也可根据要求把最小值放最后),第二次比较后,最大值放在了倒数第二的位置,一直到第二个元素确定了,整个数组的顺序也就确定了:

 1 class Bubble{
 2     public static void main(String[]args){
 3         
 4     int [] arr={23,34,12,24,67,45,90};
 5     System.out.println("排序前");
 6     printArr(arr);
 7     System.out.println("排序后");
 8     sort(arr);
 9     printArr(arr);
10     
11     }
12     //冒泡排序
13     public static void sort(int[]arr){
14         // for(int i=0;i<arr.length-1;i++){
15             // for(int j=0;j<arr.length-1-i;j++){
16         for(int i=arr.length-1;i>0;i--){
17             for(int j=0;j<i;j++){        
18                 if(arr[j]<arr[j+1]){
19                     int tem=arr[j];
20                     arr[j]=arr[j+1];
21                     arr[j+1]=tem;
22                 }
23             
24             }
25         }
26     }
27     //打印数组
28     public static void printArr(int [] arr){
29             System.out.print("[");
30         for(int i=0;i<arr.length;i++){
31             if(i==arr.length-1){
32             System.out.print(arr[arr.length-1]+"]");
33             }
34             else{
35             System.out.print(arr[i]+",");
36             }
37         }
38         System.out.println();
39     }
40 }

 

选择排序

从0索引开始,依次后后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处;

 1 class Com{
 2     public static void main(String[]args){
 3         
 4     int [] arr={23,34,12,24,67,45,90};
 5     System.out.println("排序前");
 6     printArr(arr);
 7     System.out.println("排序后");
 8     printSele(arr);
 9     printArr(arr);
10     
11     }
12     //冒泡排序
13     public static void sort(int[]arr){
14         // for(int i=0;i<arr.length-1;i++){
15             // for(int j=0;j<arr.length-1-i;j++){
16         for(int i=arr.length-1;i>0;i--){
17             for(int j=0;j<i;j++){        
18                 if(arr[j]<arr[j+1]){
19                     int tem=arr[j];
20                     arr[j]=arr[j+1];
21                     arr[j+1]=tem;
22                 }
23             
24             }
25         }
26     }
27     //选择排序
28     public static void printSele(int []arr){
29         for(int i=0;i<arr.length-1;i++){
30             for(int j=i+1;j<arr.length;j++){
31                 if(arr[i]>arr[j]){
32                     int tem=arr[i];
33                     arr[i]=arr[j];
34                     arr[j]=tem;
35                 }
36             }
37         }
38     }
39     //打印数组结果
40     public static void printArr(int [] arr){
41             System.out.print("[");
42         for(int i=0;i<arr.length;i++){
43             if(i==arr.length-1){
44             System.out.print(arr[arr.length-1]+"]");
45             }
46             else{
47             System.out.print(arr[i]+",");
48             }
49         }
50         System.out.println();
51     }
52 }

 

二分查找(折半查找)

二分查找的前提是数组已经是有序的了:

 1 /**
 2 二分查找
 3 */
 4 class Sort{
 5     public static void main(String[]args){
 6         int [] arr={33,44,35,36,53,43,77,66,52};
 7         int[] arr0=ArrSort(arr);
 8         for(int i:arr0){
 9             System.out.print(i+"--");
10         }
11         System.out.println();
12         System.out.println("-----------");
13         int num=43;
14         int max=arr.length;
15         int min=0;
16         int index=-1;
17         while(min<=max){
18             int mid=(min+max)/2;
19             if(arr0[mid]==num){
20                 index=mid;
21                 break;
22             }
23             else if(arr0[mid]>num){
24                 max=mid-1;
25             }
26             else{
27                 min=mid+1;
28             }
29         }
30         System.out.println(index);
31     }
32     
33     public static int[] ArrSort(int[] arr){
34         for(int i=0;i<arr.length-1;i++){
35             for(int j=i+1;j<arr.length;j++){
36                 if(arr[i]>arr[j]){
37                     int tem =arr[i];
38                     arr[i]=arr[j];
39                     arr[j]=tem;
40                 }
41             }
42         }
43         return arr;
44     }
45 }

Arrays类

主要有以下静态方法:

1、public static String toString(int[] a):将数组转换成字符串

2、public static void sort(int[] a):对一个int数组进行升序排序ascending

3、public static int binarySearch(int[] a,int key):在数组中进行二分查找

基本类型包装类

byte --> :Byte

short -->:Short

int -->:Integer

long-->: Long

float -->:Float

double -->:Double

char -->:Character

boolean--> :Boolean

Integer类概述及其构造方法

Integer类在对象中包括了一个基本类型int的值;给类提供多个方法,能够在int类型和String类型之间互相转换。

1、public int intValue():返回当前对象包装的基本数据类型的int值

2、public static int parseInt(String s):将一个字符串转换成int值

3、public static String toString(int i):将一个int值转换成字符串

4、public static Integer valueOf(int i):用一个int值构建一个Integer对象

5、public static Integer valueOf(String s):用一个字符串构建一个Integer对象

自动装箱

1 Integer x = new Integer(4);//可以直接写成 
2 
3 Integer x = 4; //自动装箱。 
4 
5 x = x + 5; //自动拆箱。通过intValue方法。

需要注意: 在使用时,Integer x = null;

上面的代码就会出现NullPointerException。

原文地址:https://www.cnblogs.com/yihaifutai/p/6658984.html