ビデオ: データ構造とアルゴリズム #01 アルゴリズムを学ぶにはC言語が必須だ | PythonやJavaではダメな理由 2024
ここでは、Javaで最も一般的に使用されるソート手法の1つが実際にどのように機能するかを説明します。このテクニックは Quicksort、 と呼ばれ、非常に巧妙な再帰の使用方法です。
ほとんどの人にとって、クイックソートのようなソートアルゴリズムは単に知的な運動にすぎないと考えています。 Java APIにはすでにソートが組み込まれています。
クイックソート手法は、再帰を使用して値の配列をソートします。基本的な手順はこうです:
<! - 1 - >-
配列内の値の範囲内にある任意の値を選択します。
この値は ピボットポイント です。ピボットポイントを選択する最も一般的な方法は、配列内の最初の値を単純に選択することです。フォークはより洗練された方法で博士号を書いてピボットポイントを選んで、より速いソートを実現しています。配列の最初の要素を使用してください。
-
ピボットポイントより小さいすべての値が配列の左側にあり、ピボットポイント以上のすべての値がピボットポイントの右側にあるように、配列の値を並べ替えますアレイ。
<! - 2 - >ピボット値 は、配列の左側と右側の境界を示します。それはおそらく死んだセンターではありませんが、それは問題ではありません。このステップは パーティショニングと呼ばれ、 はアレイの左右が999パーティションです。 配列の2つのセクションのそれぞれを別々の配列として扱い、そのセクションに対してステップ1から始めます。
-
それはアルゴリズムの再帰的な部分です。
<! - 3 - >
クイックソートアルゴリズムの最も難しい部分は、ピボットポイントよりも小さいすべての値が左にあり、ピボットより大きいすべての要素が左にあるようにパーティションを再配置する必要があるパーティショニングステップですポイントは右側です。配列に以下の10個の値があるとします。
38 17 58 22 69 31 88 28 86 12
ここでピボットポイントは38であり、パーティショニングステップのタスクは次のような配列に並べ替えることです: 17 12 22 28 31 38 88 69 86 58
値がまだ順不同であることに注意してください。しかし、配列は値38の周りで分割されています。38未満のすべての値は38の左にあり、38を超えるすべての値は38の右にあります。
これで、値38で2つのパーティションに分割し、それぞれのプロセスを繰り返します。ピボット値そのものは左側のパーティションと同じですので、左側のパーティションは次のようになります。
17 12 22 28 31 38
このとき、パーティション化ステップでは、ピボットポイントとして17が選択され、次のようにエレメントが再配置されます。 > 12 17 22 28 31 38
ご覧のとおり、配列のこの部分がソートされています。残念ながら、Quicksortはこの時点でそれを認識していないので、確かめるためにはさらにいくつかの再帰が必要です。しかし、それは基本的なプロセスです。