C でのクイック ソート アルゴリズムの使用方法
クイック ソート アルゴリズムは、一般的に使用される並べ替えアルゴリズムです。その中心的な考え方は、並べ替えられるシーケンスを連続的に分割することです。次に、小さいものと大きいものの 2 つのサブシーケンスが再帰的に並べ替えられ、最後にシーケンス全体が並べ替えられます。この記事では、C でのクイック ソート アルゴリズムの使用方法を紹介し、具体的なコード例を示します。
クイック ソート アルゴリズムの実装のアイデアは次のとおりです。
以下は、C を使用してクイック ソート アルゴリズムを実装するコード例です:
#include <iostream> using namespace std; // 交换两个元素的值 void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } // 快速排序的划分函数 int partition(int arr[], int low, int high) { int pivot = arr[high]; // 选择最后一个元素作为基准 int i = (low - 1); // i代表小于基准的元素的最右边界 for (int j = low; j <= high - 1; j++) { if (arr[j] < pivot) { i++; swap(&arr[i], &arr[j]); // 将小于基准的元素放在左边 } } swap(&arr[i + 1], &arr[high]); // 将基准元素放在合适的位置 return (i + 1); } // 快速排序的递归函数 void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); // 划分数组 quickSort(arr, low, pi - 1); // 对左子数组进行递归排序 quickSort(arr, pi + 1, high); // 对右子数组进行递归排序 } } // 打印数组 void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { cout << arr[i] << " "; } cout << endl; } int main() { int arr[] = {10, 7, 8, 9, 1, 5}; int n = sizeof(arr) / sizeof(arr[0]); cout << "原始数组:"; printArray(arr, n); quickSort(arr, 0, n - 1); cout << "排序后的数组:"; printArray(arr, n); return 0; }
上記のコードを実行すると、次の出力が得られます:
原始数组:10 7 8 9 1 5 排序后的数组:1 5 7 8 9 10
このコードは、クイック ソート アルゴリズムを実装します。最初に最後の要素をベンチマークとして選択し、次にパーティション関数を使用して配列を分割し、ベンチマークより小さい要素を左側に配置し、ベンチマークより大きい要素を右側に配置します。次に、配列全体がソートされるまで、左右の部分配列が再帰的にソートされます。
概要:
クイック ソートは効率的なソート アルゴリズムです。平均時間計算量は O(n log n) です。C を使用してクイック ソート アルゴリズムを実装するのは比較的簡単です。上記のコード例を通じて、クイック ソート アルゴリズムの基本原理と実装方法を理解することができ、実際のアプリケーションで柔軟に使用することもできます。
以上がC++ でクイックソート アルゴリズムを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。