Ⅰ 如何用c语言把冒泡排序每一次的排序过程体现出来
可以打印出来看嘛。程序里加输出 i,j,a[0]到a[9]:
#include <stdio.h>
int main()
{
int a[10];
int i, j,k, temp;
printf("Please input ten numbers: \n");
for (i = 0; i < 10; i++) scanf("%d", &a[i]);
for (i = 0; i <帆镇 9; i++) {
for (j = 0; j < 9 - i; j++) {
if (a[j] > a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; }
printf("i=%d j=%d results: ",i,j);
for (k = 0; k < 10; k++) printf("派销 %d", a[k]);
printf("\n");
};};
for (i = 0; i < 10; i++) printf(" %d ", a[i]);
return 0;
}
例如:态羡粗
Please input ten numbers:
2 5 8 9 10 2 3 4 12 1
i=0 j=0 results: 2 5 8 9 10 2 3 4 12 1
i=0 j=1 results: 2 5 8 9 10 2 3 4 12 1
i=0 j=2 results: 2 5 8 9 10 2 3 4 12 1
...
i=0 j=8 results: 2 5 8 9 2 3 4 10 1 12
i=1 j=0 results: 2 5 8 9 2 3 4 10 1 12
i=1 j=1 results: 2 5 8 9 2 3 4 10 1 12
...
i=7 j=0 results: 2 2 1 3 4 5 8 9 10 12
i=7 j=1 results: 2 1 2 3 4 5 8 9 10 12
i=8 j=0 results: 1 2 2 3 4 5 8 9 10 12
Ⅱ C语言冒泡排序
C语言冒泡排序法的排序规则:将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。初始 R[1..n]为无序区。第一趟扫描 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key void sort(int *a,int len) {int i=0; int j; int t; for(i=0;ia[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } int main(int argc, char *argv[]) { int a[10]={ -999,2,3,77,12,88,0,-8,99,100 }; int i=0; sort(a,10); for(i=0;i<10;i++) { printf("%d ",a[i]); } return 0; }
Ⅲ C语言 冒泡排序法的代码
#include<stdio.h>
void main()
{
int a[10];
int i,j,t;
printf("input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=0;j<9;j++) /*进行9次循环 实现9趟比较*/
for(i=0;i<9-j;i++) /*在每一趟中进行9-j次比较*/
if(a[i]>a[i+1]) /*相邻两个数比较,想降序只要改成a[i]<a[i+1]*/
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers: ");
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
(3)c语言冒泡排查扩展阅读:
冒泡排序算法的运作
1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。
3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。
4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。
简单的表示
#include <stdio.h>
void swap(int *i, int *j)
{
int temp = *i;
*i = *j;
*j = temp;
}
int main()
{
int a[10] = {2,1,4,5,6,9,7,8,7,7};
int i,j;
for (i = 0; i < 10; i++)
{
for (j = 9; j > i; j--)//从后往前冒泡
{
if (a[j] < a[j-1])
{
swap(&a[j], &a[j-1]);
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
参考资料来源:冒泡排序-网络
Ⅳ C语言 冒泡排序法
对你需求有点疑问:
1、不要固定数=>理解为:总排序个数是可变的,比如5个数排序,600个数排序。
2、输入一个排序一次=>理解为:每输入一个数,这个数就加到要被排序的那组数中,然后对那组数进行一次“冒泡排序”。比如:
输入1;此时序列为:1;
输入8;此时序列为:1、8;
输入5;此时序列为:1、5、8;
但是这个需求与冒泡排序算法可能有点冲突。因为你要求每次输入一个数就进行了一次排序,那么下次输入的数,是要插入已经排序好的序列中,这已经没有了“冒泡”的过程,倒变成了插入排序...
3、从后面排序=>不理解:由于你要求输入一次排序一次,并不是那种等待一组数据输入完成之后,再进行排序,这已经没有所谓的前后了啊?
第2条与第3条描述清楚后,我帮你解决...
Ⅳ c语言冒泡排序法详解
任意两个数作比较,大的放后面,小的放前面,然后大的在和下一个数比较,还是大的放后小的往前,以此类推,直到所有数比完了,然后输出