数据结构排序
给定待排关键字集合为{23,14,48,25,5,19},按关键字非递减(从小到大)排序,写出采用冒泡排序的每一趟(最外层循环的每一次)排序结果。求解题过程。。。。...
给定待排关键字集合为{23,14,48,25,5,19},按关键字非递减(从小到大)排序,写出采用冒泡排序的每一趟(最外层循环的每一次)排序结果。
求解题过程。。。。 展开
求解题过程。。。。 展开
3个回答
展开全部
冒泡排序基本过程,从首元素开始,每次两两比较,前面的比后面的小,则位置不变,否则交换位置,每一趟比较,都能得到待排子序列中的最大值,就像小的值冒上去,大的值沉下来
第一趟排序:待排序列 【23,14,48,25,5,19】
(14 23 ) 48 25 5 19 :23与14交换
14 (23 48) 25 5 19 :23与48不交换
14 23 (25 48) 5 19 :25 与48交换
14 23 25(5 48) 19
14 23 25 5(19 48)
所以第一趟排序的结果:【14 23 25 5 19】 48 :这个序列的最大值48就到最后了
第二趟排序:待排序列 【14 23 25 5 19】 48,只排方括号里的就行了
第二次排序后的结果: 【14 23 5 19】 25 48,次大的25排出来了
第三次排序后的结果: 【14 5 19】 23 25 48,再次大的23排出来了
第四次排序后的结果: 【5 14】 19 23 25 48
第五次排序后的结果: 5 14 19 23 25 48 ,这个也是最终排序结果
第一趟排序:待排序列 【23,14,48,25,5,19】
(14 23 ) 48 25 5 19 :23与14交换
14 (23 48) 25 5 19 :23与48不交换
14 23 (25 48) 5 19 :25 与48交换
14 23 25(5 48) 19
14 23 25 5(19 48)
所以第一趟排序的结果:【14 23 25 5 19】 48 :这个序列的最大值48就到最后了
第二趟排序:待排序列 【14 23 25 5 19】 48,只排方括号里的就行了
第二次排序后的结果: 【14 23 5 19】 25 48,次大的25排出来了
第三次排序后的结果: 【14 5 19】 23 25 48,再次大的23排出来了
第四次排序后的结果: 【5 14】 19 23 25 48
第五次排序后的结果: 5 14 19 23 25 48 ,这个也是最终排序结果
展开全部
初始:{23,14,48,25,5,19}
第一趟:{14,23,25,5,19,48},
第二趟:{14,23,5,19,25,48},
第三趟:{14,5,19,23,25,48},
第四趟:{5,14,19,23,25,48},
第一趟:{14,23,25,5,19,48},
第二趟:{14,23,5,19,25,48},
第三趟:{14,5,19,23,25,48},
第四趟:{5,14,19,23,25,48},
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题简单,楼主的意思就是显示每一步执行后的中间结果,那只要加几个输出语句就可以了,过程很简单的,为简化起见用最常用的选择排序。程序在wn-tc和Dev-c++下调试通过。
#include<stdio.h>
#include<conio.h>
#define MAX 50
main()
{
int i,j,k,n,a[MAX],b[MAX];
printf("Please input the number of digits:");
scanf("%d",&n);
printf("Please input the digits one by one:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("The array input are:\n");
for(i=0;i<n;i++)
{printf("%4d",a[i]); b[i]=a[i];}/* b[]是a[]的副本,保存原始a[]的内容 */
printf("\n\n");
printf("The sequence in turn are:\n");
for(i=0;i<n-1;i++) /* 选择排序,从小到大排序 */
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
for(k=0;k<n;k++)
printf("%4d",a[k]);
printf("\n");
}
printf("The array after sort are:\n");
for(i=0;i<n;i++)
printf("%4d",a[i]);
/* 以下是反向排序方法相同 */
printf("\n\n\n");
printf("The sequence in turn are:\n");
for(i=0;i<n-1;i++) /* 选择排序,从大到小排序 */
for(j=i+1;j<n;j++)
if(b[i]<b[j])
{b[i]=b[i]+b[j];
b[j]=b[i]-b[j];
b[i]=b[i]-b[j];
for(k=0;k<n;k++)
printf("%4d",b[k]);
printf("\n");
}
printf("The array after sort are:\n");
for(i=0;i<n;i++)
printf("%4d",b[i]);
getch();
}
#include<stdio.h>
#include<conio.h>
#define MAX 50
main()
{
int i,j,k,n,a[MAX],b[MAX];
printf("Please input the number of digits:");
scanf("%d",&n);
printf("Please input the digits one by one:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("The array input are:\n");
for(i=0;i<n;i++)
{printf("%4d",a[i]); b[i]=a[i];}/* b[]是a[]的副本,保存原始a[]的内容 */
printf("\n\n");
printf("The sequence in turn are:\n");
for(i=0;i<n-1;i++) /* 选择排序,从小到大排序 */
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
for(k=0;k<n;k++)
printf("%4d",a[k]);
printf("\n");
}
printf("The array after sort are:\n");
for(i=0;i<n;i++)
printf("%4d",a[i]);
/* 以下是反向排序方法相同 */
printf("\n\n\n");
printf("The sequence in turn are:\n");
for(i=0;i<n-1;i++) /* 选择排序,从大到小排序 */
for(j=i+1;j<n;j++)
if(b[i]<b[j])
{b[i]=b[i]+b[j];
b[j]=b[i]-b[j];
b[i]=b[i]-b[j];
for(k=0;k<n;k++)
printf("%4d",b[k]);
printf("\n");
}
printf("The array after sort are:\n");
for(i=0;i<n;i++)
printf("%4d",b[i]);
getch();
}
参考资料: 百度一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询