用c语言实现md指令,快速排序之C语言实现.md

# 快速排序之C语言实现

## 代码

```c

#include

#include

#include

typedef enum {

OrderedAscending,

OrderedSame,

OrderedDescending,

} ComparisonResult;

typedef int ElemType;

/* 快速排序 */

void quickSort(ElemType arr[], ssize_t left, ssize_t right);

/* 交换元素 */

void swapElem(ElemType *a, ElemType *b);

/* 打印数组 */

void printArr(char *message, ElemType arr[], size_t length);

/* 打印元素 */

void printElem(ElemType elem);

/* 比较元素 */

ComparisonResult compareElem(ElemType a, ElemType b);

int main(int argc, const char *argv[]) {

ElemType arr[] = { 987, 473, 686, 385, 213, 376, 848, 799, 774, 611 };

size_t length = sizeof arr / sizeof arr[0];

printArr("排序前", arr, length);

quickSort(arr, 0, length - 1);

printArr("排序后", arr, length);

return EXIT_SUCCESS;

}

void quickSort(ElemType arr[], ssize_t left, ssize_t right) {

if (left >= right) {

return;

}

ElemType keyElem = arr[left];

ssize_t i = left;

ssize_t j = right;

while (i < j) {

while (i < j && arr[j] >= keyElem) {

--j;

}

while (i < j && arr[i] <= keyElem) {

++i;

}

if (i < j) {

swapElem(arr + i, arr + j);

}

}

arr[left] = arr[i];

arr[i] = keyElem;

quickSort(arr, left, i - 1);

quickSort(arr, i + 1, right);

}

void swapElem(ElemType *a, ElemType *b) {

ElemType temp = *a;

*a = *b;

*b = temp;

}

void printArr(char *message, ElemType arr[], size_t length) {

printf("%s: (", message);

for (size_t i = 0; i < length; ++i) {

printElem(arr[i]);

printf(i == length - 1 ? ")\n" : ", ");

}

}

void printElem(ElemType elem) {

printf("%d", elem);

}

ComparisonResult compareElem(ElemType a, ElemType b) {

if (a > b) {

return OrderedDescending;

} else if (a == b) {

return OrderedSame;

} else {

return OrderedAscending;

}

}

```

## 输出

```txt

排序前: (987, 473, 686, 385, 213, 376, 848, 799, 774, 611)

排序后: (213, 376, 385, 473, 611, 686, 774, 799, 848, 987)

```

一键复制

编辑

Web IDE

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值