永发信息网

c++对9,1,8,2,7,3,6,4,5用二分法 排序成升序!求写法!求高人指教!~

答案:3  悬赏:20  手机版
解决时间 2021-01-09 19:44
c++对9,1,8,2,7,3,6,4,5用二分法 排序成升序!求写法!求高人指教!~
最佳答案
快速排序法(即是二分排序)的思想是,找到一个值,要求这个值的左边都是小于等于这个值的,右边则大于等于这个值。
例如: int a[9]={9,1,8,2,7,3,6,4,5}
一步步演示如下:

设3个变量,i=0,j=8,fence=8 (都是下标)
i表示左边开始的元素9的下标,j表示最右边的元素5的下标,fence表示中间值的下标,初始为最右,即8。运作的时候i会往右靠,j会往左靠。

我们的目标是给数值5找一个合适的位置,让它满足上述条件。

1.i从0开始递增,每个数都和5比较,如果找到一个比5大的数,则和5交换位置。同时更新fence和i
执行后:a[9]={5,1,8,2,7,3,6,4,9} i = 1; fence = 0; (记住fence总是指示5所指的位置。)

2.j从8开始递减,每个数都和5比较,如果找到一个比5小的数,则和5交换位置。更新fence 和j
执行后:a[9]={4,1,8,2,7,3,6,5,9} j = 6; fence =7;

3.执行1的步骤:
执行后:a[9]={4,1,5,2,7,3,6,8,9} i =3 ; fence =2;

4.执行2的步骤
执行后:a[9]={4,1,3,2,7,5,6,8,9} j = 4 fence =5;

5.执行后a[9]={4,1,3,2,5,7,6,8,9} i = 5 fence =4;

至此判断 i已经大于j 中断循环 返回 fence的值,

那么经过一次排序后的结果就是a[9]={4,1,3,2,5,7,6,8,9}
5是选择的中间值,排在下标为4的位置

那么用递归对 下标为0到3,下标为5 到8 分别执行同样的排序就可以了。
这就是二分法的思想,即是快速排序。
代码如下:
#include #include
int partition(int *a, int l, int r){
int fence = r;
--r;
while(l<=r)
{
while(l<=r)
{
if(a[l]>a[fence])
{
std::swap(a[l],a[fence]);
fence = l;
++l;
break;
}
++l;
}
while(l<=r)
{
if(a[r] {
std::swap(a[r],a[fence]);
fence = r;
--r;
break;
}
--r;
}
}
return fence;
}

void quickSort(int *a, int l, int r){
if(l {
int p = partition(a,l,r);
quickSort(a,l,p-1);
quickSort(a,p+1,r);
}
}
int main()
{
int a[9]={9,1,8,2,7,3,6,4,5};
quickSort(a,0,8);
for(int i=0;i<9;++i)
std::cout<}
全部回答
冒泡排序
#include
void main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int i,j,tmp;

for(i=0;i<9;i++)
for(j=0;j<9-i;j++)

if(a[j]>a[j+1])
{
tmp=a[j];
a[j]=a[j+1];

a[j+1]=tmp;
}
printf("the sorted numbers:\n");

for(i=0;i<10;i++)

printf("%d",a[i]);
printf("\n");
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
温度的基本含义
车美汇汽车用品装潢店地址在哪,我要去那里办
急求cAD2007软件激活码,序列号是111-1111111
求海の见える街上松美香演唱版
您好 我是2010年 27岁买的平安保险智盈人生这
有一段话说原谅我们彼此背叛
已知四边形abcd与四边形a'b'c'd&
PEG型照片是什么
1.6米变1.35米船筏杆
耳蜗与晕车有什么关系
水煎包要怎样蒸煮,才不会烧底
每天喝小样对身体是好还是坏?
一块长方形木板长70釐米,阔56釐米,现在把他
河北沧州物流中通到丹阳需几天
right off the bat如何翻译好
推荐资讯
可以玩么,为啥我的mini2这么卡
单选题Achildwholivesinanuninterestingen
母亲很不爱干净,上厕所之后手冲一下就做饭了
想知道:南通市开发区附近有篮球场吗?
锲把金字旁换成单人旁是什么字
「给你永远的爱 」 英文怎么写
手背上长了个包那手老觉得酸酸的还有些麻麻
喜欢一个有女票的男生怎么办
在烽火买了一双赤足5.0 对比了朋友在专柜买的
上海上联实业集团有限公司怎么样?
横贯是什么意思?
能用热重分析法分析草酸锶水合物热分解产物吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?