ホームページ Java &#&チュートリアル Javaでの各種ソートアルゴリズムの実装コード例

Javaでの各種ソートアルゴリズムの実装コード例

Oct 20, 2017 am 09:54 AM
java 成し遂げる アルゴリズム

この記事では主に Java で実装されたさまざまなソート アルゴリズムのコード例を紹介します。比較的包括的であり、欠点がある場合はメッセージを残してください。

半挿入ソート

半挿入ソートは、直接挿入ソートを簡単に改良したものです。ここで紹介する半挿入とは、実際には半分に折り続けることでi番目の要素の挿入位置を素早く決定するという探索アルゴリズム、半探索です。 Java の Arrays クラスの binarySearch() メソッドは、配列がすでに順序付けされた状態にある場合に、指定された配列から指定された要素を検索するために使用されます。効果は直接挿入ソートと同じですが、
半挿入ソートは i 番目の要素の挿入位置をより速く決定できるため、少しだけ速くなります


コード:

package interview; 
/** 
 * @author Administrator 
 * 折半插入排序 
 */ 
public class BinaryInsertSort { 
  public static void binaryInsertSort(DataWrap[] data) { 
    System.out.println("开始排序"); 
    int arrayLength = data.length; 
    for (int i = 1; i < arrayLength; i++) { 
      DataWrap temp = data[i]; 
      int low = 0; 
      int high = i - 1; 
      while (low <= high) { 
        int mid = (low + high) / 2; 
        if (temp.compareTo(data[mid]) > 0) { 
          low = mid + 1; 
        } else { 
          high = mid - 1; 
        } 
      } 
      for (int j = i; j > low; j--) { 
        data[j] = data[j - 1]; 
      } 
      data[low] = temp; 
      System.out.println(java.util.Arrays.toString(data)); 
    } 
  } 
  public static void main(String[] args) { 
    DataWrap[] data = { new DataWrap(9, ""), new DataWrap(-16, ""), 
        new DataWrap(21, "*"), new DataWrap(23, ""), 
        new DataWrap(-30, ""), new DataWrap(-49, ""), 
        new DataWrap(21, ""), new DataWrap(30, "*"), 
        new DataWrap(30, "")}; 
    System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
    binaryInsertSort(data); 
    System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
  } 
}
ログイン後にコピー

結果:

排序之前:
[9, -16, 21*, 23, -30, -49, 21, 30*, 30]
开始排序
[-16, 9, 21*, 23, -30, -49, 21, 30*, 30]
[-16, 9, 21*, 23, -30, -49, 21, 30*, 30]
[-16, 9, 21*, 23, -30, -49, 21, 30*, 30]
[-30, -16, 9, 21*, 23, -49, 21, 30*, 30]
[-49, -30, -16, 9, 21*, 23, 21, 30*, 30]
[-49, -30, -16, 9, 21, 21*, 23, 30*, 30]
[-49, -30, -16, 9, 21, 21*, 23, 30*, 30]
[-49, -30, -16, 9, 21, 21*, 23, 30, 30*]
排序之后:
[-49, -30, -16, 9, 21, 21*, 23, 30, 30*]
ログイン後にコピー

バブルソート
コード:

package interview; 
/** 
 * @author Administrator 
 * 冒泡排序 
 */ 
public class BubbleSort { 
  public static void bubbleSort(DataWrap[] data) { 
    System.out.println("开始排序"); 
    int arrayLength = data.length; 
    for (int i = 0; i < arrayLength - 1; i++) { 
      boolean flag = false; 
      for (int j = 0; j < arrayLength - 1 - i; j++) { 
        if (data[j].compareTo(data[j + 1]) > 0) { 
          DataWrap temp = data[j + 1]; 
          data[j + 1] = data[j]; 
          data[j] = temp; 
          flag = true; 
        } 
      } 
      System.out.println(java.util.Arrays.toString(data)); 
      if (!flag) 
        break; 
    } 
  } 
  public static void main(String[] args) { 
    DataWrap[] data = { new DataWrap(9, ""), new DataWrap(-16, ""), 
        new DataWrap(21, "*"), new DataWrap(23, ""), 
        new DataWrap(-30, ""), new DataWrap(-49, ""), 
        new DataWrap(21, ""), new DataWrap(30, "*"), 
        new DataWrap(30, "")}; 
    System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
    bubbleSort(data); 
    System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
  } 
}
ログイン後にコピー

実行結果:

排序之前:
[9, -16, 21*, 23, -30, -49, 21, 30*, 30]
开始排序
[-16, 9, 21*, -30, -49, 21, 23, 30*, 30]
[-16, 9, -30, -49, 21*, 21, 23, 30*, 30]
[-16, -30, -49, 9, 21*, 21, 23, 30*, 30]
[-30, -49, -16, 9, 21*, 21, 23, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
排序之后:
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
ログイン後にコピー

バケットソート
アルゴリズムの時間効率: 非常に時間効率が高い高、2 ラウンドのトラバーサルのみが必要です。 アルゴリズムのスペース効率: スペースのオーバーヘッドが大きく、アルゴリズムの安定性: 安定しています。

package interview; 
import java.util.Arrays; 
/** 
 * @author Administrator 
 * 桶式排序 
 */ 
public class BucketSort { 
  public static void bucketSort(DataWrap[] data, int min, int max) { 
    System.out.println("开始排序"); 
    int arrayLength = data.length; 
    DataWrap[] temp = new DataWrap[arrayLength]; 
    int[] buckets = new int[max - min]; 
    for (int i = 0; i < arrayLength; i++) { 
      buckets[data[i].data - min]++; 
    } 
    System.out.println(Arrays.toString(buckets)); 
    for (int i = 1; i < max - min; i++) { 
      buckets[i] = buckets[i] + buckets[i - 1]; 
    } 
    System.out.println(Arrays.toString(buckets)); 
    System.arraycopy(data, 0, temp, 0, arrayLength); 
    for (int k = arrayLength - 1; k >= 0; k--) { 
      data[--buckets[temp[k].data - min]] = temp[k]; 
    } 
  } 
  public static void main(String[] args) { 
    DataWrap[] data = { new DataWrap(9, ""), new DataWrap(5, ""), 
        new DataWrap(-1, ""), new DataWrap(8, ""), 
        new DataWrap(5, "*"), new DataWrap(7, ""), 
        new DataWrap(3, ""), new DataWrap(-3, ""), 
        new DataWrap(1, ""),new DataWrap(3, "*")}; 
    System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
    bucketSort(data, -3, 10); 
    System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
  } 
}
ログイン後にコピー



ヒープソート


コード:

排序之前:
[9, 5, -1, 8, 5*, 7, 3, -3, 1, 3*]
开始排序
[1, 0, 1, 0, 1, 0, 2, 0, 2, 0, 1, 1, 1]
[1, 1, 2, 2, 3, 3, 5, 5, 7, 7, 8, 9, 10]
排序之后:
[-3, -1, 1, 3, 3*, 5, 5*, 7, 8, 9]
ログイン後にコピー
結果:
package interview; 
/** 
 * @author Administrator 
 * 堆排序 
 */ 
public class HeapSort { 
  public static void heapSort(DataWrap[] data) { 
    System.out.println("开始排序"); 
    int arrayLength = data.length; 
    // 循环建堆 
    for (int i = 0; i < arrayLength - 1; i++) { 
      // 建堆 
      builMaxdHeap(data, arrayLength - 1 - i); 
      // 交换堆顶和最后一个元素 
      swap(data, 0, arrayLength - 1 - i); 
      System.out.println(java.util.Arrays.toString(data)); 
    } 
  } 
  // 对data数组从0到lastIndex建大顶堆 
  private static void builMaxdHeap(DataWrap[] data, int lastIndex) { 
    // 从lastIndex处节点(最后一个节点)的父节点开始 
    for (int i = (lastIndex - 1) / 2; i >= 0; i--) { 
      // k保存当前正在判断的节点 
      int k = i; 
      // 如果当前k节点的子节点存在 
      while (k * 2 + 1 <= lastIndex) { 
        // k节点的左子节点的索引 
        int biggerIndex = 2 * k + 1; 
        // 如果biggerIndex小于lastIndex,即biggerIndex +1 
        // 代表k节点的右子节点存在 
        if (biggerIndex < lastIndex) { 
          // 如果右子节点的值较大 
          if (data[biggerIndex].compareTo(data[biggerIndex + 1]) < 0) { 
            // biggerIndex总是记录较大子节点的索引 
            biggerIndex++; 
          } 
        } 
        // 如果k节点的值小于其较大子节点的值 
        if (data[k].compareTo(data[biggerIndex]) < 0) { 
          // 交换它们 
          swap(data, k, biggerIndex); 
          // 将biggerIndex赋给k,开始while循环的下一次循环 
          // 重新保证k节点的值大于其左、右节点的值 
          k = biggerIndex; 
        } else { 
          break; 
        } 
      } 
    } 
  } 
  // 交换data数组中i、j两个索引处的元素 
  private static void swap(DataWrap[] data, int i, int j) { 
    DataWrap temp = data[i]; 
    data[i] = data[j]; 
    data[j] = temp; 
  } 
  public static void main(String[] args) { 
    DataWrap[] data = { new DataWrap(9, ""), new DataWrap(-16, ""), 
        new DataWrap(21, "*"), new DataWrap(23, ""), 
        new DataWrap(-30, ""), new DataWrap(-49, ""), 
        new DataWrap(21, ""), new DataWrap(30, "*"), 
        new DataWrap(30, "")}; 
    System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
    heapSort(data); 
    System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
  } 
}
ログイン後にコピー

直接挿入ソート



排序之前:
[9, -16, 21*, 23, -30, -49, 21, 30*, 30]
开始排序
[-16, 30, 21*, 23, -30, -49, 21, 9, 30*]
[-16, 23, 21*, 9, -30, -49, 21, 30, 30*]
[21, 9, 21*, -16, -30, -49, 23, 30, 30*]
[-49, 9, 21*, -16, -30, 21, 23, 30, 30*]
[-30, 9, -49, -16, 21*, 21, 23, 30, 30*]
[-30, -16, -49, 9, 21*, 21, 23, 30, 30*]
[-49, -30, -16, 9, 21*, 21, 23, 30, 30*]
[-49, -30, -16, 9, 21*, 21, 23, 30, 30*]
排序之后:
[-49, -30, -16, 9, 21*, 21, 23, 30, 30*]
ログイン後にコピー

結果

package interview;
public class InsertSort {
	public static void insertSort(DataWrap[] data){ 
	  System.out.println("开始排序"); 
	  int arrayLength = data.length; 
	  for(int i = 1;i < arrayLength;i++){ 
	    DataWrap temp = data[i]; 
	    if(data[i].compareTo(data[i-1]) < 0){ 
	      int j = i -1; 
	      for(;j >= 0 && data[j].compareTo(temp) > 0;j--){ 
	        data[j +1] = data[j]; 
	      } 
	      data[j + 1] = temp; 
	    } 
	    System.out.println(java.util.Arrays.toString(data)); 
	  } 
	} 
	public static void main(String[] args) { 
	  DataWrap[] data = { new DataWrap(9, ""), new DataWrap(-16, ""), 
	      new DataWrap(21, "*"), new DataWrap(23, ""), 
	      new DataWrap(-30, ""), new DataWrap(-49, ""), 
	      new DataWrap(21, ""), new DataWrap(30, "*"), 
	      new DataWrap(30, "")}; 
	  System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
	  insertSort(data); 
	  System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
	} 
}
ログイン後にコピー

マージソート


アルゴリズムの時間効率: マージアルゴリズムは、マージソートが実行されるたびに再帰的に分解およびマージする必要があり、その実行ごとに merge() メソッドが必要になります。

merge() には n 回の比較が必要で、さらに悪いことに、元のシーケンスと同じサイズの補助シーケンスが必要です。アルゴリズムの安定性:安定した
コード:

排序之前:
[9, -16, 21*, 23, -30, -49, 21, 30*, 30]
开始排序
[-16, 9, 21*, 23, -30, -49, 21, 30*, 30]
[-16, 9, 21*, 23, -30, -49, 21, 30*, 30]
[-16, 9, 21*, 23, -30, -49, 21, 30*, 30]
[-30, -16, 9, 21*, 23, -49, 21, 30*, 30]
[-49, -30, -16, 9, 21*, 23, 21, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
排序之后:
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
ログイン後にコピー
結果:

package interview; 
/** 
 * @author Administrator 
 * 归并排序 
 */ 
public class MergeSort { 
  public static void mergeSort(DataWrap[] data) { 
    // 归并排序 
    sort(data, 0, data.length - 1); 
  } 
  // 将索引从left到right范围的数组元素进行归并排序 
  private static void sort(DataWrap[] data, int left, int right) { 
    if(left < right){ 
      //找出中间索引 
      int center = (left + right)/2; 
      sort(data,left,center); 
      sort(data,center+1,right); 
      //合并 
      merge(data,left,center,right); 
    } 
  } 
  // 将两个数组进行归并,归并前两个数组已经有序,归并后依然有序 
  private static void merge(DataWrap[] data, int left, int center, int right) { 
    DataWrap[] tempArr = new DataWrap[data.length]; 
    int mid = center + 1; 
    int third = left; 
    int temp = left; 
    while (left <= center && mid <= right) { 
      if (data[left].compareTo(data[mid]) <= 0) { 
        tempArr[third++] = data[left++]; 
      } else { 
        tempArr[third++] = data[mid++]; 
      } 
    } 
    while (mid <= right) { 
      tempArr[third++] = data[mid++]; 
    } 
    while (left <= center) { 
      tempArr[third++] = data[left++]; 
    } 
    while (temp <= right) { 
      data[temp] = tempArr[temp++]; 
    } 
  } 
  public static void main(String[] args) { 
    DataWrap[] data = { new DataWrap(9, ""), new DataWrap(-16, ""), 
        new DataWrap(21, "*"), new DataWrap(23, ""), 
        new DataWrap(-30, ""), new DataWrap(-49, ""), 
        new DataWrap(21, ""), new DataWrap(30, "*"), 
        new DataWrap(30, "") }; 
    System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
    mergeSort(data); 
    System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
  } 
}
ログイン後にコピー
-radixソートある並べ替え方法の場合、基数並べ替えは別の並べ替え方法に依存する必要があります。

基数ソートの一般的な考え方は、ソート対象のデータを複数のキーワードに分割してソートすることです。つまり、基数ソートの本質は複数キーワードのソートです。
複数キーワードによる並べ替えの考え方は、並べ替え対象のデータ内の並べ替えキーワードを複数の並べ替えキーワード (1 番目のサブキーワード、2 番目のサブキーワード、3 番目のサブキーワード) に分割することです。 。 。次に、ソート対象のデータをサブキーワードに従ってソートします。複数キーワードのソートを実行する場合、次の 2 つの解決策があります:


最高ビット優先方式 MSD

最低ビット優先方式 LSD


MSD 方式と LSD 方式を比較すると、一般的に、LSD 方式の方が優れています。 MSD メソッド LSD メソッドは最初から最後まで複数の割り当てと収集を実行し、実行回数はキー値を構成するコンポーネントの数に依存するため、シンプルです。一方、MSD メソッドは独立した並べ替えを処理する必要があります。各シーケンスとサブシーケンスの一部は複雑になる可能性があります。 コード:

排序之前:
[9, -16, 21*, 23, -30, -49, 21, 30*, 30]
排序之后:
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
ログイン後にコピー

結果




package interview; 
 
import java.util.Arrays; 
 
/** 
 * @author Administrator 
 * 基数排序 
 */ 
public class MultiKeyRadixSort { 
  public static void radixSort(int[] data, int radix, int d) { 
    System.out.println("开始排序:"); 
    int arrayLength = data.length; 
    int[] temp = new int[arrayLength]; 
    int[] buckets = new int[radix]; 
    for (int i = 0, rate = 1; i < d; i++) { 
      // 重置count数组,开始统计第二个关键字 
      Arrays.fill(buckets, 0); 
      // 当data数组的元素复制到temp数组中进行缓存 
      System.arraycopy(data, 0, temp, 0, arrayLength); 
      for (int j = 0; j < arrayLength; j++) { 
        int subKey = (temp[j] / rate) % radix; 
        buckets[subKey]++; 
      } 
      for (int j = 1; j < radix; j++) { 
        buckets[j] = buckets[j] + buckets[j - 1]; 
      } 
      for (int m = arrayLength - 1; m >= 0; m--) { 
        int subKey = (temp[m] / rate) % radix; 
        data[--buckets[subKey]] = temp[m]; 
      } 
      System.out.println("对" + rate + "位上子关键字排序:" 
          + java.util.Arrays.toString(data)); 
      rate *= radix; 
    } 
  } 
 
  public static void main(String[] args) { 
    int[] data = { 1100, 192, 221, 12, 13 }; 
    System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
    radixSort(data, 10, 4); 
    System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
  } 
}
ログイン後にコピー

クイックソート

コード:



排序之前:
[1100, 192, 221, 12, 13]
开始排序:
对1位上子关键字排序:[1100, 221, 192, 12, 13]
对10位上子关键字排序:[1100, 12, 13, 221, 192]
对100位上子关键字排序:[12, 13, 1100, 192, 221]
对1000位上子关键字排序:[12, 13, 192, 221, 1100]
排序之后:
[12, 13, 192, 221, 1100]
ログイン後にコピー

結果


package interview; 
/** 
 * @author Administrator 
 * 快速排序 
 */ 
public class QuickSort { 
  private static void swap(DataWrap[] data, int i, int j) { 
    DataWrap temp = data[i]; 
    data[i] = data[j]; 
    data[j] = temp; 
  } 
  private static void subSort(DataWrap[] data, int start, int end) { 
    if (start < end) { 
      DataWrap base = data[start]; 
      int i = start; 
      int j = end + 1; 
      while (true) { 
        while (i < end && data[++i].compareTo(base) <= 0) 
          ; 
        while (j > start && data[--j].compareTo(base) >= 0) 
          ; 
        if (i < j) { 
          swap(data, i, j); 
        } else { 
          break; 
        } 
      } 
      swap(data, start, j); 
      subSort(data, start, j - 1); 
      subSort(data, j + 1, end); 
    } 
  } 
  public static void quickSort(DataWrap[] data){ 
    subSort(data,0,data.length-1); 
  } 
  public static void main(String[] args) { 
    DataWrap[] data = { new DataWrap(9, ""), new DataWrap(-16, ""), 
        new DataWrap(21, "*"), new DataWrap(23, ""), 
        new DataWrap(-30, ""), new DataWrap(-49, ""), 
        new DataWrap(21, ""), new DataWrap(30, "*"), 
        new DataWrap(30, "") }; 
    System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
    quickSort(data); 
    System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
  } 
}
ログイン後にコピー


直接選択並べ替え

コード:

排序之前:
[9, -16, 21*, 23, -30, -49, 21, 30*, 30]
排序之后:
[-49, -30, -16, 9, 21, 21*, 23, 30*, 30]
ログイン後にコピー

package interview; 
/** 
 * @author Administrator 
 * 直接选择排序 
 */ 
public class SelectSort { 
  public static void selectSort(DataWrap[] data) { 
    System.out.println("开始排序"); 
    int arrayLength = data.length; 
    for (int i = 0; i < arrayLength - 1; i++) { 
      for (int j = i + 1; j < arrayLength; j++) { 
        if (data[i].compareTo(data[j]) > 0) { 
          DataWrap temp = data[i]; 
          data[i] = data[j]; 
          data[j] = temp; 
        } 
      } 
      System.out.println(java.util.Arrays.toString(data)); 
    } 
  } 
  public static void main(String[] args) { 
    DataWrap[] data = { new DataWrap(9, ""), new DataWrap(-16, ""), 
        new DataWrap(21, "*"), new DataWrap(23, ""), 
        new DataWrap(-30, ""), new DataWrap(-49, ""), 
        new DataWrap(21, ""), new DataWrap(30, "*"), 
        new DataWrap(30, "") }; 
    System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
    selectSort(data); 
    System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
  } 
}
ログイン後にコピー

ヒルソート


コード:

排序之前:
[9, -16, 21*, 23, -30, -49, 21, 30*, 30]
开始排序
[-49, 9, 21*, 23, -16, -30, 21, 30*, 30]
[-49, -30, 21*, 23, 9, -16, 21, 30*, 30]
[-49, -30, -16, 23, 21*, 9, 21, 30*, 30]
[-49, -30, -16, 9, 23, 21*, 21, 30*, 30]
[-49, -30, -16, 9, 21*, 23, 21, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
排序之后:
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
ログイン後にコピー

結果:

package interview; 
/** 
 * @author Administrator 
 * Shell排序 
 */ 
public class ShellSort { 
  public static void ShellSort(DataWrap[] data) { 
    System.out.println("开始排序"); 
    int arrayLength = data.length; 
    int h = 1; 
    /** 
     * 将数组分割成若干个子序列 
     */ 
    while (h <= arrayLength / 3) { 
      h = h * 3 + 1; 
      System.out.println("h的结果:" + h); 
    } 
    while (h > 0) { 
      System.out.println("===h的值:" + h + "==="); 
      /** 
       * 将分成的若干子序列进行直接插入排序 
       */ 
      for (int i = h; i < arrayLength; i++) { 
        DataWrap temp = data[i]; 
        if (data[i].compareTo(data[i - h]) < 0) { 
          int j = i - h; 
          for (; j >= 0 && data[j].compareTo(temp) > 0; j -= h) { 
            data[j + h] = data[j]; 
          } 
          data[j + h] = temp; 
        } 
        System.out.println(java.util.Arrays.toString(data)); 
      } 
      h = (h - 1) / 3; 
    } 
  } 
  public static void main(String[] args) { 
    DataWrap[] data = {  
        new DataWrap(9, ""), new DataWrap(-16, ""), 
        new DataWrap(21, "*"), new DataWrap(23, ""), 
        new DataWrap(-30, ""), new DataWrap(-49, ""), 
        new DataWrap(21, ""), new DataWrap(30, "*"), 
        new DataWrap(30, "")}; 
    System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); 
    ShellSort(data); 
    System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); 
  } 
}
ログイン後にコピー


必須ツール:

排序之前:
[9, -16, 21*, 23, -30, -49, 21, 30*, 30]
开始排序
h的结果:4
===h的值:4===
[-30, -16, 21*, 23, 9, -49, 21, 30*, 30]
[-30, -49, 21*, 23, 9, -16, 21, 30*, 30]
[-30, -49, 21*, 23, 9, -16, 21, 30*, 30]
[-30, -49, 21*, 23, 9, -16, 21, 30*, 30]
[-30, -49, 21*, 23, 9, -16, 21, 30*, 30]
===h的值:1===
[-49, -30, 21*, 23, 9, -16, 21, 30*, 30]
[-49, -30, 21*, 23, 9, -16, 21, 30*, 30]
[-49, -30, 21*, 23, 9, -16, 21, 30*, 30]
[-49, -30, 9, 21*, 23, -16, 21, 30*, 30]
[-49, -30, -16, 9, 21*, 23, 21, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
排序之后:
[-49, -30, -16, 9, 21*, 21, 23, 30*, 30]
ログイン後にコピー

以上がJavaでの各種ソートアルゴリズムの実装コード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles