快速排序

本文记录了暑期集训第一天的学习经历,作者通过实践快速排序算法,分享了其基本思想及实现过程,并附上了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天暑期集训的第一天,浑浑噩噩的度过了一天。感觉有一点手足无措,什么都没有学到,急切地感觉到我需要一份假期学习计划,不能这样漫无目的的学习,荒度时光,既然留在这里了,就一定要学到一点东西,哪怕只是一点点,明天再简单地学一点,在明天之类就一定要拟定一份假期学习计划。今天学的东西是一些简单的排序,本来早就该掌握的,我却到现在才来慢慢的学。

       快排的基本思想就是:在一系列数中选定一个作为标准,然后挨个与之比较,比他大的放在一边,比他小的放在另一边。再在这两边分别用此种方法,依次递归,直到排序完成。我的方法是选定最右边的数作为标准数。

       例题是pku2388.

以下是快排的代码:

      

#include<cstdio>
#include<iostream>
#define N 120
using namespace std;

void QuickSort(int left ,int right ,int a[])
{
    if(right<left+2){
        if(a[left]>a[right])
            swap(a[left], a[right]);
        return ;
    }

    int i=left, j=right, x = a[right];
    while(i<j){
        while(a[i]<x && i<j) i++;
        while(a[j]>=x && i<j) j--;
        swap(a[i], a[j]);
    }

    swap(a[i], a[right]);
    if(left < i-1) QuickSort(left, i-1, a);
    if(i+1 < right) QuickSort(i+1, right, a);
}

int main()
{
    int n;
    int b[N];
    scanf("%d", &n);
    for(int i = 0; i<n; i++)
        scanf("%d", &b[i]);
    QuickSort(0,n-1,b);
    for(int i = 0; i<n; i++)
       printf("%d ", b[i]);

    return 0;
}
以下是例题代码:

<span style="font-size:18px;">#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<iostream>
#define N 10005
using namespace std;
void qsort(int left ,int right, int a[])
{
    int i , j, x;
    if(right<left+2){
        if(a[left]>a[right])
            swap(a[left], a[right]);
        return ;
    }
    i = left, j = right, x = a[right];
   while(i<j){
         while(a[i]<x && i<j) i++;
         while(a[j]>=x && i<j) j--;
         swap(a[i], a[j]);
   }
   swap(a[i], a[right]);
   if(left<i-1) qsort(left, i-1, a);
   if(i+1<right) qsort(i+1, right,a);
}

int main()
{
    int n ;
    int a[N];
    scanf("%d", &n);
    for(int i = 0; i<n; i++)
        scanf("%d",&a[i]);
        qsort(0,n-1,a);
        int r = a[n/2];
        printf("%d\n", r);
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值