0

C 快速排序

 2 years ago
source link: https://blog.ixk.me/post/c-quick-sort
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

C 快速排序

2018-11-27 • Otstar Lin •
本文最后更新于 268 天前,文中所描述的信息可能已发生改变

开头和介绍都是不存在的( ̄︶ ̄)↗

这次是真修复了,坑爹呀,LintCode 提交了好几次,终于 AC 了,应该是没问题了 ≧ ﹏ ≦,另外我这代码只能算还行只打败了 51%的提交 (捂脸

1#include <stdio.h>
2#define N 10 //定义要排序的数组个数
3
4//快速排序控制Demo
5
6//快速排序函数
7int* Quick_Sort(int left, int right, int nums[])
8{
9    //定义标记,并设置标记为排序数组最末端,即right的后一个数
10    int pivot = right + 1;
11    //存储最左端,为下一轮存储left标记
12    int left_temp = left;
13    //临时交换数
14    int temp;
15    //判断left标记是否已经到达right或right之后,若是则代表此轮排序的判断部分已经完成
16    while(left < right)
17    {
18        //判断left标记的数是否小于标记的数,若是则向右移动left标记
19        while(nums[left] < nums[pivot])
20        {
21            left++;
22            if(left > right) break;
23        }
24        //判断right标记是否大于标记的数,若是则向左移动right标记
25        while(nums[right] > nums[pivot])
26        {
27            right--;
28            if(left > right) break;
29        }
30        //若left标记不小于right则代表此轮已经完成
31        if(left >= right) break;
32        //若不是,则将left和right标记数交换
33        temp = nums[left];
34        nums[left] = nums[right];
35        nums[right] = temp;
36    }
37    //判断标记数是否是最大的,即left标记是否已经到达标记数,若不是则交换left标记数与标记数
38    if(nums[left] >= nums[pivot])
39    {
40        temp = nums[left];
41        nums[left] = nums[pivot];
42        nums[pivot] = temp;
43    }
44    //判断是否要进行下一轮,若是则进行下一轮
45    if(left_temp < left - 1) Quick_Sort(left_temp, left - 2, nums);
46    if(left + 1 < pivot) Quick_Sort(left + 1, pivot - 1, nums);
47    //返回排序好的数组
48    return nums;
49}
50
51int main(int argc, char const *argv[])
52{
53    //定义要进行排序的数组
54    int nums[N] = {5, 4, 7, 12, 4, 9, 2, 1, 13, 2};
55    //设置数组长度
56    int n = 10;
57    //调用排序函数并将排序好的头指针传给p
58    int *p = Quick_Sort(0, n - 2, nums);
59    int i;
60    //循环输出排序好的数组
61    for(i = 0; i < n; i++)
62    {
63        printf("%d ",p[i]);
64    }
65    return 0;
66}
C 快速排序
Otstar Lin
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK