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

作者&投稿:敏盾 (若有异议请与网页底部的电邮联系)
程序中有一个错误,即在交换两个数值时,使用了未定义的变量 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语言冒泡排序法代码是什么?~

所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法。
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次,若按降序排列,第一次比较:则是将数组的第一个元素与数组中从第二个元素开始到最后的元素进行比较找到最大的数记录下来然后将值赋值给数组的第一个元素,然后进行第二次比较:则是将数组的第二个元素与数组中从第三个元素开始到最后的元素进行比较,找最大的数记录下来将值赋值给数组的第二个元素。。。依次循环找完

易语言数组排序不对
答:此排序法名为:冒泡排序法 意思就是和冒泡一个 从地下冒到上面 而是正序还是倒序 只需要更改如果真语句中的< 号 >号即可 数组 = { 233, 1,5, 5, 6, 8, 7, 9, 41, 62, 2, 1, 3, 0 }c = 1b = 取数组成员数 (数组).判断循环首 (c >0)c = 0.变量循环首 (1, b -...

C语言,用冒泡排序实现10个数字由小到大输出,为什么我弄出来是乱码_百度...
答:void make(int b[10]){ int j,k,m;for(j=0;j<=9;j++){ for(k=0;k<9-j;k++)if(b[k]>b[k+1]){ m=b[k];b[k]=b[k+1];b[k+1]=m;} } } 整体的 include <stdio.h> //void in(int a[10])//{ //int i;// for(i=0;i<10;i++)// { //scanf(...

C语言冒泡排序降序没问题,但升序有问题,我是哪里做错了吗?
答:再从第二个数据开始,找到第二小(大)的数据将它放到第二个位置,以此类推,直到只剩下最后一个数为止。这种排序方法在排序的过程中,是小的数就如气泡一样逐层上浮,而使大的数逐个下沉,于是就形象地取名为冒泡排序,又名起泡排序 / include<stdio.h> define Length 10 int main(){ int i,j...

C语言 我初学 编个冒泡排序 5个数,运行的时候出错。停止工作,见字见图...
答:scanf()中函数没加地址符&。正确写法应该是scanf("%d", &a[i]);

C语言 冒泡排序编译出错
答:include <stdio.h> include <string.h> struct discussion_record { int record_ID;char student_ID[20];char name[20];int age;int reply_number;char topic[20];}discussion_record[20];void statistic(){ int e,f;int g[20]={0};int h[20]={0};printf("\n[Statistic]\n");for(...

c语言中冒泡问题。为什么冒泡排序出来的有一个是乱码,而另一种算法排序...
答:冒泡排序的外层循环是for(i=0; i<n-1; i++),内层循环是for(j=0; j<n-1-i; j++),每次比较的两个元素是a[j]和a[j+1]。你的n=5,所以外层循环应该是for(i=0; i<4; i++),内层循环应该是for(j=0; j<4-i; j++)。

Java冒泡排序法,代码编辑无报错提醒,一运行就出错==||。求大佬救救孩纸...
答:你这是死记硬背的吧,错误太多了,逻辑都不同。百度一下冒泡排序法,看看怎么个原理吧,知道了原理就不会写错。附上源代码:ublic static void bubbleSort(int []arr) { int[] arr = {12,23,34,56,56,56,78};for(int i =0;i<arr.length-1;i++) { boolean bool = true;for(int j...

C语言冒泡排序法数组元素多了排序出问题了?
答:第7行改为 for(i=0;i<9-j;i++)当j==0时,a[i+1]会会出现a[10]的情况,越界访问了

python冒泡排序法求告知哪里错了_(:з」∠)_
答:冒泡排序算法的运作如下:1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。3. 针对所有的元素重复以上的步骤,除了最后一个。4. 持续每次对越来越少的元素重复上面的步骤,直到...

c语言冒泡排序最终结果错误
答:输出结果时for(i=0;i<=N;i++)//这里多输出了一个根本不存在的NUM[N=5]把i<=N改成i<N