快速排序算法

本文深入探讨了快速排序算法的原理与实现细节,通过示范代码展示了如何使用模板函数进行快速排序操作,包括枢纽选择、分区操作及递归排序过程。

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

 快速排序算法是对冒泡排序算法的改进。它的基本思想是,通过一趟排序将序列分成两部分,其中一部分记录均比另一部分记录的值小。再分别对这两部分序列继续快速排序,以达到整个序列的有序。

     在具体实现方法上是对序列data[s..t],以data[s]作为枢纽重新排列,把比data[s]大的都放到它前面,比data[s]小的都放到它后面,经过重新排列后s的位置也产生了变化,假设变为i(s<i<t)。之后再对data[s..i-1]和data[i+1..t]分别进行快速排序,直到整个序列有序。

下面看一下示范代码:

//-------------快速排序------------------------------------------
template<typename T>
void qkpass(T *data, int s,int t, int &i)
{//一趟快速排序,将data[s..t]以data[s]为枢纽重新排列分成两部分
//一部分小于data[s],一部分大于data[s],s被移动到i的位置。
= s;
T x 
= data[s];    //暂存data[s]
int j=t;
while( i < j )
{
   
//从t倒退查找小于x的元素,找到后移动到序列的前面
   while( i < j && data[j] >= x ) j--;
   data[i] 
= data[j];

   
//从s开始向前找大于x的元素,找到后移动到序列的后面
   while( i < j && data[i] <= x ) i++;
   data[j] 
= data[i];
}

data[i] 
= x;
}


template
<typename T>
void qksorti(T *data, int s,int t)
{//快速排序递归过程,对data[s..t]进行快速排列
if( s < t )
{
   
int k = 0;

   
//一趟排序,以位置k分成两部分,前面的全部小于data[k],后面的全部大于data[k]
   qkpass( data, s, t, k );

   
//对k前面的元素再进行快速排序
   qksorti( data, s, k-1 );

   
//对k后面的元素再进行快速排序
   qksorti( data, k+1, t );
}

}


template
<typename T>
void qksort(T *data, unsigned len)
{//快速排序
qksorti( data, 0, len-1 );
}

//--------------end of快速排序--------------------------------


int _tmain(int argc, _TCHAR* argv[])
{

int arr[] = {100,5,1,3,11,3,6,-1};

qksort( arr, 
sizeof(arr)/sizeof(arr[0]) );

return 0;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值