冒泡排序程序 returns 个随机数
Bubble-sort program returns random numbers
我正在学习 C 和我的冒泡排序代码 returns 有时是一个随机数(尽管有时它会 returns 正确的数组数)。
例如,它应该打印 {0, 1, 3, 10}。但有时会打印 {-487420160, 0, 1, 3} 或 {-1484260208, 0, 1, 3} 之类的东西(只有第一个数字改变,其他是正确的)。
这是代码:
#include <stdio.h>
int main(){
//array and variables
int arr[] = {1, 3, 0, 10};
int len = sizeof(arr)/ sizeof(int);
int j = 0;
int i = 0;
//print original array
printf("ORIGINAL ARRAY: \n");
printf("{");
for (int x = 0; x < len; x ++){
printf("%d", arr[x]);
if (x < len-1){
printf(", ");
}
}
printf("}\n");
//sorting
for ( i = 0;i < len; i++){
for (j = 0 ;j < len; j ++){
if(arr[j] > arr[j+1]){
int temporal = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temporal;
}
}
}
//print sorted array
printf("BUBBLE-SORTED ARRAY: \n");
printf("{");
for (int y = 0; y < len; y ++){
printf("%d", arr[y]);
if (y < len-1){
printf(", ");
}
}
printf("}\n");
return 0;
}
有人知道为什么或者可以帮助我改进代码吗?
代替 for(j=0:j<len;j++)
更改为 for(j=0:j<len-1;j++)
:
for ( i = 0;i < len; i++){
for (j = 0 ;j < len; j ++){// here instead of len use len-1
if(arr[j] > arr[j+1]){
int temporal = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temporal;
}
}
}
现在,在冒泡排序中我们通常比较到最后,但在你的情况下 j=len
然后 j+1
是一个不存在且没有元素的随机数。
进行以下更改,您将获得解决方案。
#include <stdio.h>
int main(){
//array and variables
int arr[] = {1, 3, 0, 10};
int len = sizeof(arr)/ sizeof(int);
int j = 0;
int i = 0;
int x=0;
int y=0;
//print original array
printf("ORIGINAL ARRAY: \n");
printf("{");
for (x = 0; x < len; x ++){
printf("%d", arr[x]);
if (x < len-1){
printf(", ");
}
}
printf("}\n");
//sorting
for ( i = 0;i < len; i++){
for (j = 0 ;j < len-1; j++){// Here is the change, len has been changed to len-1
if(arr[j] > arr[j+1]){
int temporal = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temporal;
}
}
}
//print sorted array
printf("BUBBLE-SORTED ARRAY: \n");
printf("{");
for (y = 0; y < len; y ++){
printf("%d", arr[y]);
if (y < len-1){
printf(", ");
}
}
printf("}\n");
return 0;
}
我正在学习 C 和我的冒泡排序代码 returns 有时是一个随机数(尽管有时它会 returns 正确的数组数)。
例如,它应该打印 {0, 1, 3, 10}。但有时会打印 {-487420160, 0, 1, 3} 或 {-1484260208, 0, 1, 3} 之类的东西(只有第一个数字改变,其他是正确的)。
这是代码:
#include <stdio.h>
int main(){
//array and variables
int arr[] = {1, 3, 0, 10};
int len = sizeof(arr)/ sizeof(int);
int j = 0;
int i = 0;
//print original array
printf("ORIGINAL ARRAY: \n");
printf("{");
for (int x = 0; x < len; x ++){
printf("%d", arr[x]);
if (x < len-1){
printf(", ");
}
}
printf("}\n");
//sorting
for ( i = 0;i < len; i++){
for (j = 0 ;j < len; j ++){
if(arr[j] > arr[j+1]){
int temporal = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temporal;
}
}
}
//print sorted array
printf("BUBBLE-SORTED ARRAY: \n");
printf("{");
for (int y = 0; y < len; y ++){
printf("%d", arr[y]);
if (y < len-1){
printf(", ");
}
}
printf("}\n");
return 0;
}
有人知道为什么或者可以帮助我改进代码吗?
代替 for(j=0:j<len;j++)
更改为 for(j=0:j<len-1;j++)
:
for ( i = 0;i < len; i++){
for (j = 0 ;j < len; j ++){// here instead of len use len-1
if(arr[j] > arr[j+1]){
int temporal = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temporal;
}
}
}
现在,在冒泡排序中我们通常比较到最后,但在你的情况下 j=len
然后 j+1
是一个不存在且没有元素的随机数。
进行以下更改,您将获得解决方案。
#include <stdio.h>
int main(){
//array and variables
int arr[] = {1, 3, 0, 10};
int len = sizeof(arr)/ sizeof(int);
int j = 0;
int i = 0;
int x=0;
int y=0;
//print original array
printf("ORIGINAL ARRAY: \n");
printf("{");
for (x = 0; x < len; x ++){
printf("%d", arr[x]);
if (x < len-1){
printf(", ");
}
}
printf("}\n");
//sorting
for ( i = 0;i < len; i++){
for (j = 0 ;j < len-1; j++){// Here is the change, len has been changed to len-1
if(arr[j] > arr[j+1]){
int temporal = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temporal;
}
}
}
//print sorted array
printf("BUBBLE-SORTED ARRAY: \n");
printf("{");
for (y = 0; y < len; y ++){
printf("%d", arr[y]);
if (y < len-1){
printf(", ");
}
}
printf("}\n");
return 0;
}