快速排序中划分算法的改进

tqs520 2008-04-09 05:04:47
快速排序算法中对一次划分的改进:
在指针减1和增1的同时进行起泡操作,即在相邻的两个记录处于逆序时进行互换,同时在算法中附设两个布尔型变量分别指示指针和在从两端向中间移动的过程中是否进行过交换记录的操作,若指针在从低端向中间的移动过程中没有进行交换记录的操作,测不再需要对低端子表进行排序;类似的,若指针在从高端向中间移动的过程中没有进行交换记录的操作,则不再需要对高端子表进行排序。
有谁可以帮忙根据上面的思想替我写一个改进后的划分程序吗?用C语言哟,先谢过了!
...全文
350 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangdeqie 2008-09-16
  • 打赏
  • 举报
回复
up
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
我也想了解,谢谢LZ.
ryfdizuo 2008-04-10
  • 打赏
  • 举报
回复
有个双向冒泡的demo:
#include <stdio.h>

void Bubble2Sort(int* pData,int Count)
{
int iTemp, i;
int left = 1;
int right =Count -1;
int t;
do
{
//正向的部分
for(i=right;i>=left;i--)
{
if(pData[i]<pData[i-1])
{
iTemp = pData[i];
pData[i] = pData[i-1];
pData[i-1] = iTemp;
t = i;
}
}
left = t+1;

//反向的部分
for(i=left;i<right+1;i++)
{
if(pData[i]<pData[i-1])
{
iTemp = pData[i];
pData[i] = pData[i-1];
pData[i-1] = iTemp;
t = i;
}
}
right = t-1;
}while(left<=right);
}

void main()
{
int data[] = {10,9,8,7,6,5,4};
Bubble2Sort(data,7);
for (int i=0;i<7;i++)
printf("%d ", data[i]);
printf("\n");
}

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧