码迷,mamicode.com
首页 > 编程语言 > 详细

排序--快速排序

时间:2021-06-13 10:10:33      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:循环   use   源代码   输入   turn   temp   mem   ==   大小   

原理:快速排序需要选择一个元素作为key,然后以key为基准,比key小的放在左边,比key大的放在右边,这是一次过程。一次划分为两个区间,左右区间再用同样的方法进行排序,当最小区间排序完成,则快速排序完成,可返回结果。

key元素选择:每次选择末尾元素作为当前区间的key。

源代码:用户先录入设定大小个数的元素,元素在一行用空格分隔,然后进行排序,在一行输出结果,元素用空格分隔,可循环实现。

 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int part_sort(int *array, int left, int right)
{
    int key = array[right];
    while(left < right)
    {
        while(left < right && array[left] <= key)
            left++;
        array[right] = array[left];

        while(left < right && array[right] >= key)
           right--;
        array[left] = array[right];
    }
    array[left] = key;
    return left;
}


void quicksort(int *array, int left, int right)
{
    if(left >= right)
    {
        return;
    }
    int temp_right = 0;
    temp_right = part_sort(array, left, right);
    quicksort(array, temp_right + 1, right);
    quicksort(array, left, temp_right - 1);
}
int main()
{
    while(1)
    {
        int num = 0;
        int i = 0;
        printf("请输入需要排序的数字的个数\n");
        scanf("%d",&num);
        printf("输入整数大小为:%d\n", num);
        int array[num];
        memset(array, 0, num);
        if(i < num)
        {
            while(scanf("%d",&array[i++]))
            {
                if(getchar() == ‘\n‘)
                break;
            }
        }

        quicksort(array, 0, i);
        printf("快排后的结果为:");
        for(int j = 0; j < num; j++)
        {
            printf("%d ", array[j]);
        }
        system("pause");
    }
    return 0;
}

排序--快速排序

标签:循环   use   源代码   输入   turn   temp   mem   ==   大小   

原文地址:https://www.cnblogs.com/ldyou/p/14877210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!