快速排序

简介: 快速排序。

在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。
typedef struct _Range {
int start, end;
} Range;
Range new_Range(int s, int e) {
Range r;
r.start = s;
r.end = e;
return r;
}
void swap(int x, int y) {
int t = x; x = y; y = t;
}
void quick_sort(int arr[], const int len) {
if (len <= 0)
return; // 避免len等於負值時引發段錯誤(Segment Fault)
// r[]模擬列表,p為數量,r[p++]為push,r[--p]為pop且取得元素
Range r[len];
int p = 0;
r[p++] = new_Range(0, len - 1);
while (p) {
Range range = r[--p];
if (range.start >= range.end)
continue;
int mid = arr[(range.start + range.end) / 2]; // 選取中間點為基準點
int left = range.start, right = range.end;
do
{
while (arr[left] < mid) ++left; // 檢測基準點左側是否符合要求
while (arr[right] > mid) --right; //檢測基準點右側是否符合要求

        if (left <= right)
        {
            swap(&arr[left],&arr[right]);
            left++;right--;               // 移動指針以繼續
        }
    } while (left <= right);

    if (range.start < right) r[p++] = new_Range(range.start, right);
    if (range.end > left) r[p++] = new_Range(left, range.end);
}

}

相关文章
|
7月前
快速排序(超超详细,因为自己也不是很会)
快速排序(超超详细,因为自己也不是很会)
|
6天前
快速排序
快速排序
8 0
|
4月前
|
算法
快速排序(三)——hoare法
快速排序(三)——hoare法
32 1
|
5月前
|
C++
C++快速排序
C++快速排序
38 1
|
9月前
|
算法 搜索推荐 测试技术
快速排序详解
快速排序详解
47 0
|
10月前
|
人工智能 搜索推荐
【快速排序】
【快速排序】
|
11月前
重新理解快速排序
重新理解快速排序
40 0
|
12月前
|
机器学习/深度学习
785. 快速排序
785. 快速排序
43 0