快速排序

来源:互联网 发布:怎样在手机淘宝上评价 编辑:程序博客网 时间:2024/06/03 12:00

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
每一趟快速排序都把数组分成两部分,然后分别对前后两部分,在进行快速排序,这是一个递归的过程,直到子序列个数为1为止。

#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 100typedef char InfoType;typedef struct Sz{    int key;    InfoType *info;}Sz;typedef struct SQ//定义一个顺序线性表{    Sz *R;    int length;}SqList;int Init_SqList(SqList *L)//顺序线性表初始化{    L->R=(Sz *)malloc((MAX_SIZE + 1) * sizeof(Sz)) ;    if(!L->R)        return 0;    else    {        L->length = 0;        return 1;    }}

一趟快速排序

//一趟快速排序算法int  quick_one_pass(SqList *L , int low, int high){    int i = low;    int j = high;    L->R[0] = L->R[i];/*R[0]作为临时单元和哨兵*/    do    {        while ((L->R[0].key < L->R[j].key)&&(j > i))            j--;        if(j>i)        {            L->R[i]=L->R[j] ; i++;        }        while((L->R[i].key < L->R[0].key)&&(j > i))            i++;        if(j>i)        {            L->R[j] = L->R[i];            j--;        }    } while(i != j);/*i=j时退出扫描*/    L->R[i] = L->R[0];    return(i);}

递归调用一趟快速排序的算法

//快速排序(递归)void quick_Sort(SqList *L, int low, int high){                        //low、high是每部分的起始位置和终端位置    int k;    if(low < high)    {        k = quick_one_pass(L, low, high);        quick_Sort(L, low, k-1);        quick_Sort(L, k+1, high);    }/*序列分为两部分后,分别对每个子序列快速排序*/}

main方法

int main(){    int i;    int num;    SqList L;    Init_SqList(&L);    /*输入排序码*/    printf("please enter the number of the data:");    scanf("%d", &num);    for(i = 1; i < num + 1; i++){        int values;        printf("please enter the %d data:", i);        scanf("%d", &values);        L.R[i].key = values;        L.length++;    }    for(i = 1; i <= L.length; i++)    {        printf("%d  ", L.R[i].key);    }    printf("\n");    printf("-----------------------------\n");    /*快速排序*/    quick_Sort(&L, 1, num);    for(i = 1; i <= L.length; i++)    {        printf("%d  ", L.R[i].key);    }    printf("\n");    return 0;}

例:
这里写图片描述
运行结果:
这里写图片描述

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 都合 合和 场合 李东海机场腿合不上 女人爱完两腿合不上 上吊 上吊女尸 上吊神曲 上吊图片 梦见上吊 上吊死 上吊表情包 雪莉上吊 上吊痛苦 松鼠上吊 上吊痛苦吗 上吊死的人 拉勾上吊 梦见人上吊 拉钩上吊 上吊多久死 上吊阳线 52岁保姆上吊身亡 暴走英雄坛上吊 梦见有人上吊 一哭二闹三上吊 一棵树上吊死人 拉钩上吊一百年不许变 大树上吊个口袋 一棵树上吊死 唐国强前妻为什么上吊 上品寒士 上品折扣 上品寒士txt 上品山庄 上品 上品世家 当代上品湾 上品折扣店 上品折扣网 上品折扣app