c语言冒泡排序法代码一直排序错误,有时只能排前两个,不明白原因,请问究竟哪里写错了,谢谢!

作者&投稿:翠诸 (若有异议请与网页底部的电邮联系)
C语言冒泡排序法代码是什么?~

所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法。
1、具体方法是,相邻数值两两交换。从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换(对调);如果其与我们的期望一致,则不用交换。重复这样的过程,一直到最后没有数值需要交换,则排序完成。具体情况如下图所示:

2、为了实现效果,我们得先定义一组待排序的数列以及各个变量。具体情况如下图:

3、算法的实现,具体情况如图:

4、运行结果显示。具体情况如图:

5、按照上面的程序,在第五趟(i=5)起泡时,计算机不仅要对“1,5,6,4”两两进行比较并排序,还要对“7,8,9,13”进行两两比较并排序,而“7,8,9,13”在第四趟起泡时就已经排序好了,所以再进行比较的话,就显得非常多余。图示如下:

6、在上面程序的基础上进行优化。具体情况如图所示:

7、优化后的输出结果。如图所示:

1、冒泡排序法:一趟一趟的将两个相邻的数进行交换如果有10个数则需要排9躺,如果是从
大到小输出则需要每次将后一个数和前一个数进行比较将较大的数赋值给钱一个数,将较小的数赋值给后一个数,其实就是两个数交换,那么第一趟交换完毕后,最
小的数便出现在了数组的最后面,然后进行第二趟的比较时则要对余下的前9个数进行比较,9趟比较完成后则数组也已经排好序。
2、选择排序法:10个数则是需要排9次,若按降序排列,第一次比较:则是将数组的第一个元素与数组中从第二个元素开始到最后的元素进行比较找到最大的数记录下来然后将值赋值给数组的第一个元素,然后进行第二次比较:则是将数组的第二个元素与数组中从第三个元素开始到最后的元素进行比较,找最大的数记录下来将值赋值给数组的第二个元素。。。依次循环找完

程序中有一个错误,即在交换两个数值时,使用了未定义的变量 temp,应该将 temp 定义为一个临时变量来暂存一个元素的值。下面是修改后的程序:
#include <stdio.h>int main(void){ int num[100]={0}, i, j, n, temp; //定义数组、计数器、临时变量并初始化为0
printf("请输入数的个数:"); scanf("%d",&n); //获取数列元素个数
for(i=0;i<n;i++)
{ scanf("%d",&num[i]); //获取数列每个元素的值
} //冒泡排序算法
for(j=0;j<n-1;j++) //外层循环,控制排序次数
{ for(i=0;i<n-1-j;i++) //内层循环,控制每次排序的范围
{ if(num[i] > num[i+1]) //如果相邻元素逆序,则交换它们的位置
{
temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
}
}
} printf("排序结果: ");
for(i=0;i<n;i++) //输出排序结果
{ printf("%d, ",num[i]);
} return 0;
}

#include <stdio.h>
int main(void)
{
int num[100],i,j,n,temp;
printf("请输入数的个数:");
scanf("%d",&n); 
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);

for(j=0;j<n;j++)
{
for(i=0;i<n-1-j;i++)
{
if(num[i] > num[i+1])
{
temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
}
}
}
printf("排序结果: "); 
for(i=0;i<n;i++)
{
printf("%d, ",num[i]);
}
return 0;
}





C语言:冒泡排序法(升序排序法)
使用C语言的冒泡排序法,可以对数组如12, 43, 9, 13, 67, 98, 101, 89, 3, 35进行升序排列。代码中,通过嵌套循环,比较相邻元素并交换位置,直到整个数组有序。对于字符的排序:对于字符数组如'i', 'l', 'o', 'v', 'e', 'y', 'o', 'u', 'y', 'x',冒泡排序同样适用。通过...

C语言:冒泡排序法将数组中10个元素从小到大排序,并找出最小值?_百度...
int a[11], min = 0, t;for (int i = 0; i < 10; i++) { scanf("%d", &a[i]);} min = a[0];for (int i = 0; i < 10; i++) { if (a[i] < min) { min = a[i]; \/\/ 寻找最小值 } } for (int i = 0; i < 10; i++) { \/\/ 冒泡排序 for (in...

C语言冒泡排序法代码
6. 最后比较 87 和 78,由于顺序正确,不交换,第一趟排序结束,数列变为 12, 56, 45, 78, 87。7. 接下来的每一趟排序都是对剩余未排序的部分重复这个过程,直到没有需要交换的元素为止。8. 下面是 C 语言实现的冒泡排序代码,包括一个打印函数和一个排序函数:```c include void Print(int...

两个数相同时c语言怎么用冒泡法?
如果要对一个数组进行冒泡排序,在C语言中可以使用以下的代码:void bubbleSort(int arr[], int n) { int i, j, temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; ...

冒泡排序法讲解
1、首先看一下整体的代码,如图,冒泡排序是通过二层的for循环来实现的。2、里层里的if语句,是用当前比较的数和自己邻近的数比较,如果比邻近的数大,就和其交换位置,这样就把大的数往下移了,小的数就往上冒泡了。3、里层的for语句是把当前比较的数和剩余的数一一比较,一轮循环之后,最大的...

C语言冒泡排序法代码
main(){ int i, j, b, a[10]; printf("随机猜想数为:\\n");for(i = 0; i < 10; i++){ a[i] = rand();printf("%d\\n",a[i]);} printf("按升序排列为:\\n");for(i = 0; i < 9; i++){ for(j = 0; j < 9 - i ; j++){ if(a[j] > a[j + 1]){...

c语言 使用冒泡排序将一维数组A中的N个元素升序排列
2014-06-19 用c语言定义一个大小为10的整型数组,利用冒泡排序法将数组元... 47 2010-11-16 用C语言对一维数组排序,并输出已排好元素的原来位置 6 2013-07-28 C语言使用指针实现数组元素冒泡排序 4 2015-01-07 c语言冒泡法对数组a 进行由小到大的排序 19 更多...

C语言:采用冒泡排序方法,对10个数按由小到大的的顺序排序
printf("排序后的结果是:\\n");for(i=0;i<10;i++){ printf("%d",a);} printf("\\n");return 0;} 冒泡法:算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最...

c语言 正序 倒序 排序方法 写代码
冒泡排序 int [] num = new int []{1,4,2,3,6}; int temp; \/\/设置 中间变量 将利用此变量进行 位置调换 for(int i = 0 ; i < num.length ; i++ ){ for(int j = 1 ; j < i ; j ++){ if( num[j]>num[j+1]){ \/\/更换判断符号 实现正序 倒序排序 ...

冒泡排序如何使用Java语言完成?
运行代码如下: package day01; public class 冒泡 { public static void main(String[] args) { int []arr=new int[] {12,45,33,46,3}; System.out.println("排序之前的元素顺序:"); for(int i=0;i<arr.length;i++) { System.out.print(arr[i]+" "); ...

宁城县17317468563: 我写的c语言冒泡法排序总是不对,求高手指点!! -
邓帘磷酸: for(i=1;i<11;i++) printf("%d,",n[i] ); 改成 for(i=0;i<1;i++) printf("%d,",n[i] ); C的下标从0开始的

宁城县17317468563: 我这道c语言冒泡排序怎么错了? -
邓帘磷酸: #include <stdio.h> void main(){ int a[5] = {1,3,5,7,9}; int z,x; // 每次外层循环从剩余元素中中找出一个最大值 for(z=0;z<5;z++){ for(int i=z;i<5;i++){ if(a[z]<a[i]){ x=a[i]; a[i]=a[z]; a[z]=x; } } } for(int i=0;i<5;i++){ printf("%d ",a[i]); } printf("\n"); }

宁城县17317468563: c语言 冒泡法排序 怎么就不对了..求解! -
邓帘磷酸: for(j=0;j<9-j;j++) 这里错了吧,应该是9-i

宁城县17317468563: 关于C语言冒泡排序的错误请帮忙指点一下
邓帘磷酸:这里错了:name和clas[i].name 本来就是char类型,所以不用加引号,去掉就行了. strcpy("name","clas[j].name");strcpy("clas[j].name","clas[i].name"); strcpy("clas[i].name","name");

宁城县17317468563: c 语言 冒泡排序 怎么错了 求大神指导 (这段程序的意思就是 输入一个数n表示后面要输入的数的个 -
邓帘磷酸: 超出输入的数的个数范围了#include <stdio.h> int main () { int n,a[40],i1,i2,i3,c,i4,b; while (scanf("%d",&n)!=EOF) { for(i1=0;i1<n;i1++) scanf("%d",&a[i1]); for (i3=0; i3<n ;i3++) for(i2=0;i2<n-1-i3;i2++)//改这句就可以了 { if (a[i2]<a[i2+1]){ b=a[i2]; a[i2]=a[i2+1]; a[i2+1]=b ; } } for (i4=0;i4<n;i4++) printf("%d ",a[i4]); } }

宁城县17317468563: 哪位高手帮我看一下这个程序那里出错了,是关于C语言冒泡排序的(大数下沉),一直排出来? -
邓帘磷酸: 这样就OK 啦 一点小错误#include"stdio.h" void main() {int a[5],i,j,temp; for(i=0;i<=4;i++) scanf("%d",&a[i]); for(j=3;j>=0;j--) for(i=0;i<=j;i++) if(a[i+1]<a[i]) {temp=a[i+1]; a[i+1]=a[i]; a[i]=temp; } for(i=0;i<=4;i++) printf("%d\n",a[i]); }

宁城县17317468563: 为什么冒泡排序代码,结果总是前面是对的,最后一个出错,比如最后一个98,输出却是9,为什么,C++ -
邓帘磷酸: 一般是范围的问题,你把代码贴出来看看,估计是写循环时的范围小了1

宁城县17317468563: C语言冒泡法排序问题 -
邓帘磷酸: #include"stdio.h" main() { int a[5],*p,i,t,j; for(i=0;i<5;i++) scanf("%d",&a[i]); printf("\n"); for(i=0;i<5;i++) //改成for(i=0;i<4;i++) { for(j=0;j<5;j++)//改成for(j=0;j<4-i;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=a[j];//改成a[j+1]=t; } } for(i=0;i<5;i++) printf("%d",a[i]);

宁城县17317468563: C语言 冒泡排序法 哪里错了??? -
邓帘磷酸: //k是循环变量,不能再做交换用.//有些{}多余,已除去.#include <stdio.h> void main() { int a[3],i,j,k; for(i=0;i<=2;i++) scanf("%d",&a[i]); for(j=0;j<=2;j++) for(k=0;k<(2-j);k++) if(a[k] > a[k+1]) { int t=a[k]; a[k]=a[k+1]; a[k+1]=t; } for(i=0;i<=2;i++) printf("%d ",a[i]) ; }

宁城县17317468563: C语言编程排序问题(冒泡法) -
邓帘磷酸: 正确的程序如下: #include "stdio.h" void main() {int i,j,t,a[8];/*变量K没用*/for(i=0;i<8;i++)scanf("%d",&a[i]);/*%d后不能加空格*/for(j=1;j<8;j++)/*此处你用的变量t和下面换位的t产生冲突*/{for(i=0;i<8-j;i++)/*for循环后不能加";"*/{if...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网