1. 程式人生 > 其它 >Java比較值以及數字排序

Java比較值以及數字排序

一、今日收穫

1.比較值

1.1 最大值

兩個數:if(a>b) max=a;

多個數:

  • 遍歷時,每個數值與最大值比較

 1 public class study {
 2 public static void main(String[] args) {
 3     int[] a= {2,3,4,5,9,7,8};
 4     int max=0;
 5     for(int i=0;i<a.length;i++) {
 6         if(a[i]>max) {
 7             max=a[i];
 8         }
 9     }
10     System.out.println("最大值是:"+max);
11     }
12 }
  • 遍歷時,兩兩相鄰比較找最大值

 1 public class study {
 2 public static void main(String[] args) {
 3     int[] a= {2,3,4,5,9,7,8};
 4     int max=0;
 5     for(int i=0;i<a.length-1;i++) {
 6         if(a[i]>a[i+1]&&a[i]>max) {
 7             max=a[i];
 8         }else if(a[i+1]>a[i]&&a[i+1]>max) {
 9             max=a[i+1];
10         }
11     }
12     System.out.println("最大值是:"+max);
13     }
14 }
  • 將陣列分為兩部分,將後部分逐一與前部分每個值比較

 1 public class study {
 2 public static void main(String[] args) {
 3     int[] a= {2,3,4,5,9,7,8};
 4     int max=0;
 5     for(int i=0;i<a.length;i++) {
 6         for(int j=i-1;j>=0;j--) {
 7             /**
 8              * 將陣列分為兩部分
 9              * 將後部分的第一個逐一與前部分每一個比較
10              * 如果當前元素大,並且也大於最大值變數,則將當前元素賦值給最大值變數
11              */
12             if(a[j+1]>a[j]&&a[j+1]>max) {
13                 max=a[j+1];
14                 }
15             }
16         }
17     System.out.println("最大值是:"+max);
18     }
19 }

1.2 最小值

兩個數:if(a<b) min=a;

多個數:

  • 遍歷時,每個數值與最小值比較

  • 遍歷時,兩兩相鄰比較找最小值

  • 將陣列分為兩部分,將後部分逐一與前部分每個值比較

1.3 平均值

一組資料的和除以資料的個數


2.數字排序

2.1 氣泡排序

原理:

  • 逐一比較陣列中相鄰的兩個元素,如果後面的數字小於前面的數字,就交換先後元素

  • 經過一個輪次的比較,一定有一個最大的排在最後的位置

  • 每次比較剩下的元素,經過n-1次比較,可以實現排序

程式碼:

 1 import java.util.Arrays;
 2 public class study {
 3 public static void main(String[] args) {
 4     int[] a= {2,3,4,5,9,7,8};
 5     for(int i=0;i<a.length-1;i++) {
 6         for(int j=0;j<a.length-i-1;j++) {
 7             if(a[j]>a[j+1]) {
 8                 int t=a[j];
 9                 a[j]=a[j+1];
10                 a[j+1]=t;
11             }
12         }
13     }
14     System.out.println("排序後的陣列:"+Arrays.toString(a));
15     }
16 }

2.2 選擇排序

原理:

  • 將陣列中的每個元素與第一個元素比較,如果這個元素小於第一個元素,就將這兩個元素交換位置

  • 每輪使用第一步的規則可以選擇出一個最小元素放到第一個位置

  • 經過n–1輪比較完成排序

程式碼:

 1 import java.util.Arrays;
 2 public class study {
 3 public static void main(String[] args) {
 4     int[] a= {2,3,4,5,9,7,8};
 5     for(int i=0;i<a.length-1;i++) {
 6         for(int j=i+1;j<a.length;j++) {
 7             if(a[i]>a[j]) {
 8                 int t=a[i];
 9                 a[i]=a[j];
10                 a[j]=t;
11             }
12         }
13     }
14     System.out.println("排序後的陣列:"+Arrays.toString(a));
15     }
16 }

2.3 插入排序

原理:

  • 將陣列分為兩部分,將後部分的每一個元素逐一與前部分每一個元素比較,如果當前元素小,就替換

  • 找到合理位置插入

程式碼:

 1 import java.util.Arrays;
 2 public class study {
 3 public static void main(String[] args) {
 4     int[] a= {2,3,4,5,9,7,8};
 5     int i,j,k;
 6     for(i=1;i<a.length;i++) {
 7         k=a[i];
 8         for(j=i-1;j>=0&&k<a[j];j--) {
 9             a[j+1]=a[j];
10             }
11         a[j+1]=k;
12         }
13     System.out.println("排序後的陣列:"+Arrays.toString(a));
14     }
15 }

2.4 快速排序

原理:

  • 首先選定基準值,一般設定low所對應的元素位置為基準值

  • 在高位指標始終不小於低位指標的前提下,

高位指標開始判斷其是否比基準值大,如果符合高位指標減1,繼續尋找,直到找到不符合的情況,然後把該值賦給此時低位所在位置。
低位指標開始判斷是否比基準值小,如果符合,低位指標加1,繼續尋找,直到找到不符合情況,然後把該值賦給此時高位指標所指位置。
如此反覆,直到低位高位指標重合,此時再將當前的基準值賦給低位指標所指的值,這樣就完成了一次排序。此時,基準值就到了其最終位置上,然後繼續對以基準值為界的兩部分進行排序。

程式碼:

 1 import java.util.Arrays;
 2 public class QuickSortDemo{
 3 public static void main(String[] args) {
 4     int vec[]= {37,47,23,100,19,56,56,99,9};
 5     QuickSortDemo q=new QuickSortDemo();
 6     q.quicksort(vec,0,vec.length-1);
 7     System.out.println("排序後:"+Arrays.toString(vec));
 8 }
 9 public void quicksort(int a[],int low,int high) {
10     if(low<high) {
11         int pivot,p_pos,i;
12         p_pos=low; //p_pos指向low,即位索引為0位置
13         pivot=a[p_pos]; //將0位置上的數值賦給pivot
14         for(i=low+1;i<=high;i++) {
15             if(a[i]>pivot) {
16                 p_pos++;
17                 int tmp=a[p_pos];
18                 a[p_pos]=a[i];
19                 a[i]=tmp;
20             }
21         }
22         int tmp=a[low];
23         a[low]=a[p_pos];
24         a[p_pos]=tmp;
25         quicksort(a,low,p_pos-1); //遞迴呼叫,排序左半區
26         quicksort(a,p_pos+1,high); //遞迴呼叫,排序右半區
27     }
28     }
29 }

3.查詢

3.1 順序查詢

基本思想:讓關鍵字與佇列中的數從第一個開始逐個比較,直到找到與給定關鍵字相同的數為止。若全部比較也沒有找到與關鍵字相同的數,即查詢失敗。

 1 public class study{
 2 public static void main(String[] args) {
 3     //定義一維資料
 4     int[] ary= {2,3,4,5,9,7,8};
 5     //定義要查詢的資料
 6     int find=5;
 7     //定義標示符,即找到的位置
 8     int count=-1;
 9     for(int i=0;i<ary.length;i++) {
10         if(find==ary[i]) {
11             count=i;
12         }
13     }
14     if(count!=-1) {
15         System.out.println("下標在:"+count+"的位置");
16     }else {
17         System.out.println("對不起,沒有找到!");
18     }
19     }
20 }

3.2 二分查詢

步驟:

  • 查詢前,元素須進行排序

  • 確定區域中的中間位置:mid=(low+high)/2

  • 行待查的k值與V[mid...n]key比較:若相等,則查詢成功並返回此位置,否則需確定新的查詢區域,繼續二分查詢

 1 public class study{
 2 public static void main(String[] args) {
 3     //定義一維資料
 4     int[] a= {2,3,4,5,9,7,8};
 5     //定義要查詢的資料
 6     int find=5;
 7     //定義標示符,即找到的位置
 8     int count=-1;
 9     int low=0;
10     int high=a.length-1;
11     while(low<=high) {
12         int mid=(low+high)/2;
13         if(a[mid]==find) {
14             count=mid;
15             break;
16         }
17         else if(a[mid]>find) {
18             high=mid-1;
19         }
20         else {
21             low=mid+1;
22         }
23     }
24     if(count!=-1) {
25         System.out.println("下標在:"+count+"的位置");
26     }else {
27         System.out.println("對不起,沒有找到!");
28     }
29     }
30 }