数据结构C语言学习D13


前言

排序是程序设计中常做的操作,初学者往往只知道冒泡排序算法,其实还有很多效率更高的排序算法,比如希尔排序、快速排序、基数排序、归并排序等。

不同的排序算法,适用于不同的场景,本章最后从时间性能,算法稳定性等方面,分析各种排序算法。

排序算法,还分为内部排序算法和外部排序算法,之间的区别是,前者在内存中完成排序,而后者则需要借助外部存储器。


一、快速排序是什么?

快速排序算法是在起泡排序的基础上进行改进的一种算法,其实现的基本思想是:通过一次排序将整个无序表分成相互独立的两部分,其中一部分中的数据都比另一部分中包含的数据的值小,然后继续沿用此方法分别对两部分进行同样的操作,直到每一个小部分不可再分,所得到的整个序列就成为了有序序列。

二、使用方法

#include <stdio.h>
#include <stdlib.h>

#define N 15

// function module
int Partition(int *data, int low, int high);
int QuickSort(int *data, int low, int high);
int compare(const void *p1, const void *p2);

int main(int argc, char *argv[])
{
    int i, data[N] = {0};

    srandom(10);

    for(i = 0; i < N; i++){
        data[i] = random() % 100;
    }

    for(i = 0; i < N; i++){
        printf("%d ", data[i]);
    }
    puts("");

    // quick sort start
    qsort(data, N, sizeof(int), compare);

    for(i = 0; i < N; i++){
        printf("%d ", data[i]);
    }
    puts("");


    return 0;
}

int Partition(int *data, int low, int high){
    int temp = data[low];

    while(low < high){
        while(low < high && temp <= data[high]){
            high--;
        }
        data[low] = data[high];
        while(low < high && temp >= data[low]){
            low++;
        }
        data[high] = data[low];
    }

    data[low] = temp;

    return low;
}

int QuickSort(int *data, int low, int high){
    int t;
    if(!data) return -1;

    if(low >= high) return 0;

    t = Partition(data, low, high);
    QuickSort(data, low, t-1);
    QuickSort(data, t+1, high);

    return 0;
}

int compare(const void *p1, const void *p2){
    return (*(const int *)p1 - *(const int *)p2);
}


总结

快速排序算法的时间复杂度为O(nlogn),是所有时间复杂度相同的排序方法中性能最好的排序算法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值