如何使用陣列和陣列的長度作為兩個引數構造快速排序演算法?
那是:
void quick_sort(int A[], int n)
像這樣。
但是,我只熟悉使用 3 個引數、一個陣列以及最低索引和最高索引撰寫 Quicksort。
Quicksort下面的函式有 3 個引數arr,l、 和h。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int l, int h) {
int pivot = arr[l];
int i = l;
int j = h;
while (i < j) {
while (arr[i] <= pivot) {
i ;
}
while (arr[j] > pivot) {
j--;
}
if (i < j) {
swap(&arr[j], &arr[i]);
}
}
swap(&arr[l], &arr[j]);
return j;
}
void quickSort(int arr[], int l, int h) {
if (l < h) {
int j = partition(arr, l, h);
quickSort(arr, l, j - 1);
quickSort(arr, j 1, h);
}
}
但是,我需要撰寫一個只有兩個引數的 QuickSort 實作。
你如何撰寫執行相同排序的函式?也就是說,我們只有 的長度n,而上面完整的快速排序演算法有l和h作為引數。
uj5u.com熱心網友回復:
許多代碼為實際作業功能提供了一個很好的界面。例如,快速排序演算法可能表現為:
void quickSort( int * xs, int n );
但要實作為:
static int partition( int * xs, int left, int right )
{
...
}
static void quickSort_( int * xs, int left, int right )
{
...
}
void quickSort( int * xs, int n )
{
quickSort_( xs, 0, n );
}
注意實際的主力函式static對于用戶看不到它們的庫的作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342702.html
