
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)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)