c语言大小排序6,C语言:十种排序(六) - 快速排序

前言

一种将无序数组进行排序的方法。

快速排序,参杂了冒泡排序的交换思想。

本文只提及了递归方式的实现,该算法整体类似于二叉树,普通的迭代方法反而更加复杂。

环境

编辑器:vs2019

文件:.c类型

正文

代码参考:

#include

// 快速排序,主要思想:1. 取基值。2. 分割(基值左小右大)

void swap(int* x, int* y) {

int t = *x;

*x = *y;

*y = t;

}

// start: 起始索引

// end: 结束索引

void quick_sort_recursive(int source_array[], int start, int end)

{

if (start >= end)

{

return 0;

}

// 取基值

// source_array[end];

// 确定分割数组的索引

int left = start;

int right = end - 1;

// 开始分割

while (left < right)

{

// 从左向右找到比基值大的数

while (source_array[left] < source_array[end])

{

left++;

}

// 从右向左找到比基值小的数

while (source_array[right] > source_array[end])

{

right--;

}

// 交换两个元素

if (left < right)

{

swap(&source_array[left], &source_array[right]);

left++;

right--;

}

}

// 最后移动基值。循环结束以后,left指向 从左向右,第一个大于等于基值的值

if (left < end)

{

swap(&source_array[left], &source_array[end]);

}

quick_sort_recursive(source_array, start, left - 1);

quick_sort_recursive(source_array, left + 1, end);

}

int main()

{

// 生成随机测试列表

int test_list[30];

int test_list_length = sizeof(test_list) / sizeof(int);

printf("测试列表: \n");

for (int i = 0; i < test_list_length; i++)

{

test_list[i] = rand() % 100;

printf("%d ", test_list[i]);

}

printf("\n");

// 递归快速排序

quick_sort_recursive(test_list, 0, test_list_length - 1);

printf("递归快速排序结果: \n");

for (int i = 0; i < test_list_length; i++)

{

printf("%d ", test_list[i]);

}

printf("\n");

return 0;

}

执行结果参考:

e98826067901

image.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值