快速排序(C语言版)

//快速排序(元素用线性表存储) 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define InitiaSize 10
//定义动态线性表 
typedef struct{
    int* data;             //数据域 
    int len;               //线性表当前长度 
    int MaxSize;           //线性表最大容量 
}SqList;
//初始化并对线性表随机赋值
bool InitiaList(SqList &L){
    int len;
    printf("请输入你想要的线性表的长度:");
    scanf("%d",&len);
    while(len < 0){
        printf("您输入的长度不规范,请重新输入!\n");
        scanf("%d",&len);
    }
    if(len <= InitiaSize){
        L.data = (int*)malloc(sizeof(int)*InitiaSize);
        L.len = len;
        L.MaxSize = InitiaSize;
    }
    else{
        L.data = (int*)malloc(sizeof(int)*len);
        L.len = len;
        L.MaxSize = len;    
    }
    printf("线性表初始化完毕!当前长度是%d,最大容量是%d\n",L.len,L.MaxSize);
    int i;
    printf("接下来对线性表进行随机赋值:\n");
    srand(time(NULL));
    for(i = 0; i < L.len; i++){
        L.data[i] = rand()%100;
    }
    printf("随机赋值操作执行完毕!\n");
    return true;

//读取线性表的内容
void PrintList(SqList &L){
    if((L.len == 0)||(L.MaxSize == 0)){
        printf("此线性表为空,无法进行读取操作!\n");
        return;
    }
    int i;
    for(i = 0; i < L.len; i++){
        if(i == L.len - 1){
            printf("%d\n",L.data[i]);
        }
        else{
            printf("%d ",L.data[i]);
        }
    }
    printf("线性表内容读取完毕!该线性表长度是%d,最大容量是%d。\n",L.len,L.MaxSize);

//快速排序
int Pviot(SqList &L, int l, int r){
    int min;
    min = L.data[l];                               //默认设置首个元素先进行比较 
    while(l < r){
        while((l < r)&&(L.data[r] >= min)){r--;}   //从右边进行遍历,若元素不比min小则r-- 
        L.data[l] = L.data[r];
        while((l < r)&&(L.data[l] <= min)){l++;}   //从左边进行遍历,若元素不比min大则l++ 
        L.data[r] = L.data[l];
    }
    L.data[l] = min;                               //当l == r时,将min赋给该位置 
    return l;                                      //返回该位置的下标 
}
void QuickSort(SqList &L, int l, int r){
    if((L.len == 0)||(L.MaxSize == 0)){
        printf("此线性表为空,无法进行快速排序!\n");
        return;
    }
    if(l < r){
        int p;
        p = Pviot(L, l, r);
        QuickSort(L, l, p - 1);                     //对左半部分进行快排 
        QuickSort(L, p + 1, r);                     //对右半部分进行快排 
    }
}
int main(){
    SqList L;              //定义一个线性表
    InitiaList(L);         //对线性表进行初始化并随机赋值
    //PrintList(L);          //输出线性表内容
    clock_t T;             //对选择排序所花费的时间进行记录
    printf("即将进行快速排序!\n");
    T = clock(); 
    //SelectSort(L);         //进行选择排序
    //BubbleSort(L);         //进行冒泡排序 
    QuickSort(L, 0, L.len - 1); //进行快速排序 
    T = clock();
    printf("快速排序执行完毕!\n"); 
    printf("此次选择排序花费了%lf s\n",((float)T)/CLOCKS_PER_SEC);
    //PrintList(L);          //输出线性表内容  
    return 0;

//上述代码如有错误还请大家在评论区指正!!!谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值