選択ソートをわずかに改善するソートアルゴリズム?
ここでは、選択ソートのいくつかの改善が見られます。選択ソートは、配列から最小要素または最大要素のいずれかを取得し、その要素を正しい位置に配置することで機能することがわかっています。このアプローチでは、両方の方法で配列を並べ替えます。ここでは、最大値と最小値を同時に取得してから、配列を両端から並べ替えます。より良いアイデアを得るためのアルゴリズムを見てみましょう。
アルゴリズム
twoWaySelectionSort(arr、n)
begin for i := 0, and j := n-1, increase i by 1, and decrease j by 1, until i>=j, do min := minimum element from index i to j max := maximum element from index i to j i_min := index of min i_max := index of max exchange the arr[i] and arr[i_min] if arr[i_min] is same as max, then swap arr[j] and arr[i_min] else swap arr[j] and arr[i_max] end if done end
例
#include<iostream> using namespace std; void twoWaySelectionSort(int arr[], int n) { //i will move from left, and j will move from right for (int i = 0, j = n - 1; i < j; i++, j--) { int min = arr[i], max = arr[i]; int i_min = i, i_max = i; //i_min and i_max will hold min and max index respectively for (int k = i; k <= j; k++) { if (arr[k] > max) { max = arr[k]; i_max = k; } else if (arr[k] < min) { min = arr[k]; i_min = k; } } swap(arr[i], arr[i_min]); //put the min into the index i if (arr[i_min] == max) swap(arr[j], arr[i_min]); else swap(arr[j], arr[i_max]); } } main() { int arr[] = { 25, 45, 14, 10, 23, 29, 65, 21, 78, 96, 30 }; int n = sizeof(arr) / sizeof(arr[0]); twoWaySelectionSort(arr, n); cout << "Sorted array: "; for (int i = 0; i < n; i++) cout << arr[i] << " "; }
出力
Sorted array: 10 14 21 23 25 29 30 45 65 78 96
-
選択ソート用のPythonプログラム
この記事では、Python3.xでの選択ソートとその実装について学習します。またはそれ以前。 選択ソート アルゴリズムでは、配列は、ソートされていない部分から最小要素を再帰的に見つけて、それを先頭に挿入することによってソートされます。特定の配列での選択ソートの実行中に、2つのサブ配列が形成されます。 すでにソートされているサブアレイ ソートされていないサブアレイ。 選択ソートを繰り返すたびに、ソートされていないサブアレイの最小要素がポップされ、ソートされたサブアレイに挿入されます。 アルゴリズムの視覚的表現を見てみましょう- それでは、アルゴリズムの実装を見てみましょう- 例
-
Rubyでの選択ソートを理解する
注:これは、Rubyを使用したさまざまな並べ替えアルゴリズムを紹介するシリーズのパート2です。パート1ではバブルソートについて説明しました。 この投稿では、Rubyを使用して選択ソートアルゴリズムを実装する方法について説明します。選択ソートは、インプレース比較ソートアルゴリズムです。これは、ソートされたアイテムが元のアイテムと同じストレージを占有することを意味します。先に進む前に、データセットが小さい(つまり、10〜20要素)場合を除いて、選択ソートアルゴリズムは実際には一般的に使用されないことに注意することが重要です。ただし、自転車の前に三輪車に乗る方法を学ぶのと同じように、学習して理