javaでよく見られる配列の検索と配列の並べ替え

3290 ワード

共通の検索方法:
第一の順序で検索します。つまり、順序によって一桁ずつ検索して、検索する数の索引(下付き)を見つけます。
データ量が大きい時、最悪の場合、コンピュータの負荷も非常に大きく、効率が低いです。
public static void main(String[] args) {
    System.out.println("        ");
    Scanner scanner = new Scanner(System.in);
    int num = scanner.nextInt();
    int[] arr = {2,4,6,8,10,12,14,16};
    int index = find(arr,num);
    if (index == -1){
        System.out.println("     ");
    }else {
        System.out.println("          " + index);
    }
}
/**
 *
 * @param arr      
 * @param num      
 * @return -1-    ,>=0-  
 */
public static int find(int[] arr,int num){
    for (int i = 0;i
第二の半変換検索(二分割検索):検索の効率を最適化しました。
行列は順序付けされなければなりません。
public static void main(String[] args) {
    System.out.println("        ");
    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    int[] arr = {2, 4, 6, 8, 10, 12, 14, 16,18};
    int index = find(arr,num);
    System.out.println("          " + index);
}
/**
 *     
 * @param arr      
 * @param num      
 * @return           
 */
private static int find(int[] arr,int num) {
    int start = 0;
    int end = arr.length-1;
    int mid = (start+end)/2;
    while (num != arr[mid]){
        if (arr[mid] > num){
            end=mid-1;
        }else {
          start=mid+1;
        }
        mid = (start+end)/2;
    }
    return mid;
}
配列の並べ替え:
方法1:発泡体の並べ替え
泡の並べ替え(Bbble sort):隣の二つの数を一つずつ比較して、前の数が後の数より小さいなら交換してください。第1ラウンドの比較が終わったら、一番小さい値は必ず最後に生まれます。各ラウンドの比較は最小値が生まれます。
public static void main(String[] args) {
    int[] a = {22, 87, 52, 11, 88, 24};
    bubble(a);
    write(a);
}
public static void bubble(int[] a){
    for (int j = 1; j <= a.length - 1; j++) {
        for (int i = 0; i <= a.length - j - 1; i++) {
            if (a[i] > a[i + 1]) {
                int t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
            }
        }
    }
}
public static void write(int[] a) {
    for (int i : a) {
        System.out.print(i + " ");
    }
}
方法2:並べ替えを選択する
public static void main(String[] args) {
      int[] a = {22, 87, 52, 11, 88, 24};
      int n = a.length;

      for (int i = 1;i<=n-1;i++){
      //         
      int maxIndex = 0;
      for (int j = 1; j <= n - i; j++) {
          if (a[j] > a[maxIndex]) {
              maxIndex = j;
          }
      }
      //        
      int t = a[maxIndex];
      a[maxIndex] = a[n - i];
      a[n - i] = t;
    }
    write(a);
}
  public static void write(int [] a){
      for (int i :a){
          System.out.print(i+" ");
      }
  }
方法3:逆さま配列
配列の各数の対称の数を見つけたら、交換すればいいです。
public static void main(String[] args) {
      int[] array = {4,6,7,8,9,20,40,50};
    reverseArray(array);
    printArray(array);
}
public static void reverseArray(int[] array){
   for (int i = 0;i < array.length/2;i++){
       int temp = array[i];
       array[i] = array[array.length-i-1];
       array[array.length-i-1] = temp;
   }
}
public static void printArray(int[] array){
    for (int i = 0;i < array.length;i++){
        System.out.print(array[i] + "\t");
    }
}