快速排序

Posted zxzmnh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。

 快速排序:

1. 样例求解:5 7 10 6 9 4 3 8

 

 技术图片

 

 

2. i要从基数开始,因为如果对于要排序的一个区间,基数恰好就是最小的那个数,那么它对于后面的排序无影响,整个过程不需要交换,当时由代码的思想需要将基数调到小于它的数的右边,如果从基数后面的数开始遍历,那么当基数为最小值时,也会出现基数后面的数和基数交换的情况,所以要从基数开始。

3. 不能先从i开始遍历,因为如果从i开始遍历由下标i累加的条件,i至少会先累加一,但是如果基数也就是最开始下标i所对应的数恰好是区间最小值,i实际上不需要变话,如果从j开始,在这种情况下,j会递减到i为止,循环将会停止,返回基数的下标。

#include<stdio.h>
#define maxn 2000
#pragma warning(disable:4996)
using namespace std;
int f[maxn];
int n;
void swap(int a[], int x, int y)

    int t = a[x];
    a[x] = a[y];
    a[y] = t;

int  part(int a[],int l,int r)

    int i = l, j = r-1;
    int x = a[l];
    while (i != j)
            
        while (a[j] > x && i < j)j--;
        while (a[i] <= x && i < j) i++;    
        if (i < j)
        
            swap(a, i, j);
        
    
    a[l] = a[j];
    a[j] = x;
    return j;

void q_sort(int a[], int l, int r)

    if (r - l <= 1) return;
    int x = part(a, l, r);
    q_sort(a, l, x);
    q_sort(a, x + 1, r);
    return;

int main()

    scanf("%d",&n);
    for (int i = 0; i < n; i++)
    scanf("%d",f+i);
    q_sort(f, 0, n);
    for (int i = 0; i < n; i++)
        printf("%d ",f[i]);

    getchar();
    getchar();
    return 0;

 

以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章

深度解析(十六)快速排序

快速排序

基于快速排序方法改成求第k大的数

简单介绍一下快速排序的思想?

用C语言编程实现快速排序算法

Python实现排序算法之快速排序