内排序算法问题:编程实现冒泡排序,并输出第3次冒泡时的中间结果,请写出完整程序,谢谢

内排序算法问题:编程实现冒泡排序,并输出第3次冒泡时的中间结果,请写出完整程序,谢谢,第1张

#include<stdio.h>

int main()

{

    int a[10]

    int i,j

    int tem

    bool bchange = false

    printf("请输入10个整数,空格隔开:\n")

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

    {

        scanf("%d",&a[i])

    }

    //Bubble

    for(i=1i<10i++)

    {

        //bchange = false

        for(j=0j<10-ij++)

        {

            if(a[j]>a[j+1])

            {

                tem = a[j]

                a[j] = a[j+1]

                a[j+1] = tem

                bchange = true

            }

        }

        if(i == 3)

        {

         printf("第空纯%d趟排序的结果为:\n",i)

    for(int k = 斗棚咐0k<10k++)

    {

        printf("%3d",a[k])        

    }

    printf("\n")

        }

        //if(!bchange)//not change

        //break

    }

    printf("排序后的结果为:\n")

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

    {

      和差  printf("%3d",a[i])        

    }

        printf("\n")

        return 0

}

在排序过程中i代表第几次排序,通过变量i既可以控制 输出第几行排序结果。

希望能够帮到你。

方法/步骤灶判:程序实现:

写一个折半插入排序法的函数名,包含参数。

int TwoSort(int * ListData,int ListLength)

写一个循环,在循环中应用折半插入排序。数组中变换二次区间方法来实现折半插入法:

int TwoSort(int * ListData,int ListLength)

{

int i = 0

int j = 0

for(i=1i<隐拍改=lengthi++)

{

int tmp = ListData[i]

int low = 0

int hight = i-1;

while(low <= hight)

{

mid = (low+hight)/2

if(tmp >ListData[mid])

low = mid+1

else

hight = mid-1

}

for(j=i-1j>=lowj--)

ListData[j+1]=ListData[j]

r[low]=tmp

}

return 0

}

对编好的程序进行测试,得出测试结果:

#include <stdio.h>

int main()

{

int TestData[5] = {34,15,6,89,67}

int i = 0

printf("排序之前的结果\n")

for(i = 0i<贺含5i++)

printf("|%d|",TestData[i])

int retData = TwoSort(TestData,5)

printf("排序之后的结果:\n")

for(i = 0i<5i++)

printf("|%d|",TestData[i])

return 0

}

END

方法/步骤2:数据分析:

1

可以减少比较的次数,折半插入要比直接插入排序要快一点,因为它改善了,算法中比较的次数,它的时间复杂度是:n*(log2(n))

这个算法要比直接插入排序要求,但是时间复杂度的笼统的算法是和直接一样的O(n*n)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12237935.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存