c语言快速排序算法案例,C语言中使用快速排序算法对元素排序的实例详解

调用C语言的快速排序算法qsort();

#include

#include

#include

#define SIZE 100

//从小到大排序

int comp1(const void *x,const void *y)

{

return *(int *)x - *(int *)y;

}

//从大到小排序

int comp2(const void *x,const void *y)

{

return *(int *)y - *(int *)x;

}

void main()

{

int arr[SIZE];

int n = 0; //数组的有效长度

int t = 0;

int i;

printf("input the arr(Q to quit).\n");

while( (t = scanf("%d",&arr[n])) != 0)

{

n++;

}

printf("arr before qsort.\n");

for(i = 0; i < n; i++)

{

printf("arr[%d]=%d\t",i,arr[i]);

if((i+1) % 5 == 0)

{

printf("\n");

}

}

qsort(arr,n,sizeof(int),comp1);

printf("\narr after qsort.\n");

for(i = 0; i < n; i++)

{

printf("arr[%d]=%d\t",i,arr[i]);

if((i+1) % 5 == 0)

{

printf("\n");

}

}

qsort(arr,n,sizeof(int),comp2);

printf("\nRecover All.\n");

for(i = 0; i < n; i++)

{

printf("arr[%d]=%d\t",i,arr[i]);

if((i+1) % 5 == 0)

{

printf("\n");

}

}

printf("\n");

}

3ae42f35a90e0429a6122291c99e7362.png

只带两个参数的快速排序:

编写快速排序,函数qsort(),函数只带两个参数

#include

#include

#include

#define LEN 10

typedef int dataType;

//初始化数组,数组元素为小于100的整数

void intiArr(dataType A[], int len);

//打印数组元素

void print(dataType A[], int len);

//带两个参数的快排

void qsort(dataType A[], int len);

int main()

{

dataType data[LEN];

intiArr(data,LEN);

printf("排序前数组元素:");

print(data,LEN);

qsort(data,LEN);

printf("排序后数组元素:");

print(data,LEN);

return 0;

}

初始化数组,数组元素为小于100的整数

void intiArr(dataType A[], int len)

{

int i;

srand((unsigned)time(NULL));

for(i = 0; i < len; i++)

{

A[i] = rand() % 100;

}

}

打印数组元素

void print(dataType A[], int len)

{

int i;

for(i = 0; i < len; i++)

{

if(i % 5 == 0)

printf("\n");

printf("%d\t",A[i]);

}

printf("\n");

}

带两个参数的快排

void qsort(dataType A[], int len)

{

dataType *p = A;

dataType *q = A + len - 1;

dataType temp = *p;;

if(len <= 0)

{

return ;

}

while(p < q)

{

while((p < q) && (*q >= temp))

{

q--;

}

*p = *q;

while((p < q) && (*p <= temp))

{

p++;

}

*q = *p;

}

*p = temp;

qsort(A,p - A);

qsort(p + 1,len - (p - A) - 1);

}

a1a2b2a2cbba2fbbe34cf101273f5a1c.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值