快速排序

本文详细介绍了手写快速排序算法的过程,并通过实例代码展示了排序前后的对比,旨在帮助读者理解快速排序的核心思想和实现细节。

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

//一直都用的C标准库的快排,今天自己手打一遍,看看到底自己退化了没有....好吧。经典的分治思想,时间复杂度应该是 T(n) = Cn + T(k) + T( n-k)   k 为枢轴  
#include <stdio.h>
#include <stdlib.h>
int a[10] = { 1, 10, 3, 9, 18, 2, 7, 9, 0, 10 };
void qsort( int a[], int begin, int end )
{
     int i, j, key;
     if( begin > end )
         return ;
     i = begin;
     j = end;
     key = a[i];
     while( i < j )
     {
        while( i<j && a[j] > key )j--;
        if(i<j) a[i++]=a[j];
        while( i<j && a[i] < key)i++;
        if (i<j) a[j--]=a[i]; 

     }
     a[i] = key;
     if( begin < i-1 )
         qsort( a, begin, i-1 );
     if( i+1 < end )
         qsort( a, i+1, end );
}
int main()
{
    int i;
    printf( "before sort:\n" );
    for( i = 0; i < 10; i++ )
         printf( "%d ", a[i] );
    printf( "\n" );
    qsort( a, 0, 9 );
    printf( "after sort:\n" );
    for( i = 0; i < 10; i++ )
         printf( "%d ", a[i] );
    printf( "\n" );
    while(1);
    return 0;
}
//次快速排序为原地快速排序,即不需要其他存储空间, 所以在key的选择上是固定的选第一个元素,然后指针也必须从最后一个元素开始扫


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值