如何在C语言中实现快速排序
如何在C语言中实现快速排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联主营朝阳网站建设的网络公司,主营网站建设方案,成都App定制开发,朝阳h5微信小程序搭建,朝阳网站营销推广欢迎朝阳等地区企业咨询
快速排序的递归算法
#include#include #include #include #include #include using namespace std; #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE 0 typedef int Status; //输出函数 void Print(int a[], int l, int r) { int i; for(i = l; i <= r; i++) { printf("%d ", a[i]); } printf("\n"); } //划分函数 int partion(int a[], int left, int right) { //取最右边的元素作划分元素 int temp = a[right]; //记录 i = left, j = right int i = left, j = right-1; //循环直到左右指针相遇 while(true) { //从左边开始扫描,当出现比划分元素大的元素,扫描停止 while(temp > a[i]) { i++; } //从右边进行扫描,当出现比划分元素小的元素,扫描停止 while(temp < a[j] && j >= left) { j--; } //如果 i >= j, 循环截止,下面的交换不执行 if(i >= j) break; //交换停止时的元素 swap(a[i], a[j]); } //交换该元素与划分元素 swap(a[i], a[right]); Print(a, 0, 6); //printf("i = %d", i); //划分过程结束 return i; } //快速排序 void qsort(int a[], int left, int right) { //排序完成,循环截止 if(right <= left) return; //做划分 int i = partion(a, left, right); //对左部分排序 if(left < (i-1)) printf("对%d~%d排序\n", left, i-1), qsort(a, left, i-1); //对右部分排序 if(right > (i+1)) printf("对%d~%d排序\n", i+1, right), qsort(a, i+1, right); } int main() { int a[7] = {2, 5, 3, 7, 6, 1, 4}; //快速排序 printf("对0~6排序\n"); qsort(a, 0, 6); Print(a, 0, 6); return 0; }
非递归快速排序
快速排序的非递归实现使用了一个显式的下推栈,使用向栈中压入参数和过程调用/退出不断地从栈中弹出参数来替代递归调用,这个过程继续直到栈为空.我们把两个子数组中的较大者压入栈中来确保最大栈的深度为lgN,如果对N个元素进行排序.
void qsort(int a[], int left, int right)
{
int i;
//定义栈s
stack s;
//先判断栈是否为空
while(!s.empty())
{
//若栈不为空,将栈中元素移出
s.pop();
}
//将right入栈
s.push(right);
//将left入栈
s.push(left);
//while循环,当栈为空时,循环结束
while(!s.empty())
{
//元素left出栈
left = s.top(), s.pop();
//元素right出栈
right = s.top(), s.pop();
//判断left与right的关系,如果left>=right,continue
if(left >= right)
{
continue;
}
//作划分
i = partion(a, left, right);
//比较两个子数组的大小
//将子数组中的较大者压入栈
if((i-1-left) > (right-i-1))
{
s.push(i-1);
s.push(left);
s.push(i+1);
s.push(right);
}
else
{
s.push(i+1);
s.push(right);
s.push(i-1);
s.push(left);
}
}
} 看完上述内容,你们掌握如何在C语言中实现快速排序的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
网页标题:如何在C语言中实现快速排序
转载注明:http://www.jxjierui.cn/article/pjeicg.html


咨询
建站咨询
