bubble中的冒泡排序和getchar

时间:2015-05-27 12:47:38

标签: c++ sorting getchar

我正在使用microsoft visual studio 2012并尝试进行冒泡排序。这是我的代码:

#include "stdafx.h"
#include "String.h"
#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    int array[100], n, c, d, swap;
    printf("enter numbers of elements\n");
    scanf_s("%d",&n);
    printf("enter %d integers\n", n);
    for (c = 0; c < n; c++){
        scanf_s("%d", array);
    }
    for (c = 0; c < (n - 1); c++)
    {
        for (d = 0; d < n - c - 1; d++)
        {
            if (array[d]>array[d + 1]){
                swap = array[d];
                array[d] = array[d + 1];
                array[d + 1] = swap;
            }
        }
    }
    printf("sorted list in ascending order:\n");
    for (c = 0; c < n; c++){
        printf("%d\n", &array[c]);
    }
    getchar();
    return 0;
}

首先,我不能让控制台停留在一个关键的条目上。 getchar()似乎没有用,但我没有任何错误。另外,当我看到控制台一秒钟时,我可以说这些数字被列为&#34; -310892&#34;。我不知道为什么。

3 个答案:

答案 0 :(得分:2)

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

int main(void)
{
    int array[100],n,c,d,flag,swap;
    printf("Enter the no. of elements\n");
    scanf("%d",&n);
    for(c=0;c<n;c++)
    {
        scanf("%d",&array[c]);  // here you have to add & for assigning a address to variable in memory 
    }


for(c=0;c<(n-1);c++)
{
    flag=0;
    for(d=0;d<n-c-1;d++)
    {
        if(array[d]>array[d+1])
        {
            swap=array[d];
            array[d]=array[d+1];
            array[d+1]=swap;
            flag=1;
        }

    }
    if(flag==0)
    break;
}
printf("sorted elements in ascending order:\n");
for(c=0;c<n;c++)
{
    printf("%d\t",array[c]);// you want to print the element not its address so no need of &
}
getch();    
return 0;}
  1. 请注意我添加了额外的变量&#34; flag&#34;这有助于提高程序的效率,因为循环将在元素完成排序时中断,但在程序中循环可能会进行一些额外的迭代。

答案 1 :(得分:0)

我修正了其他人提到的拼写错误并添加了system("pause")。在VS 2010上为我工作得很好。没有访问VS 2012进行测试。这是你的代码:

#include <string.h>
#include <stdio.h>

    int main()
    {
        int array[100], n, c, d, swap;

        printf("enter numbers of elements\n");
        scanf("%d",&n);
        printf("enter %d integers\n", n);

        for (c = 0; c < n; c++){
            scanf("%d", &array[c]);
        }

        for (c = 0; c < (n - 1); c++)
        {
            for (d = 0; d < n - c - 1; d++)
            {
                if (array[d]>array[d + 1]){
                    swap = array[d];
                    array[d] = array[d + 1];
                    array[d + 1] = swap;
                }
            }
        }
        printf("sorted list in ascending order:\n");

        for (c = 0; c < n; c++){
            printf("%d\n", array[c]);
        }

        system("pause"); // <---- Added this!!!

        return 0;
    }

希望它也适合你。

答案 2 :(得分:0)

关于您的冒泡排序实施:

  1. 第一个scanf_s循环中的for始终将数字读入数组的第一个位置。
  2. 最后一个printf循环中的for需要一个整数,但是你提供了一个地址。
  3. 为防止控制台消失,您可以将getchar()替换为system("pause"),但这不可移植。

    纠正这些事情,泡泡排序对我有用:

    #include "stdafx.h"
    #include "String.h"
    #include <iostream>
    using namespace std;
    #include <string.h>
    
    int main() {
        int array[100], n, c, d, swap;
    
        printf("enter numbers of elements\n");
        scanf_s("%d",&n);
        printf("enter %d integers\n", n);
    
        for (c = 0; c < n; c++) {
            scanf_s("%d", &array[c]);
        }
    
        for (c = 0; c < (n - 1); c++) {
            for (d = 0; d < n - c - 1; d++) {
                if (array[d] > array[d + 1]) {
                    swap = array[d];
                    array[d] = array[d + 1];
                    array[d + 1] = swap;
                }
            }
        }
    
        printf("sorted list in ascending order:\n");
        for (c = 0; c < n; c++){
            printf("%d\n", array[c]);
        }
    
        system("pause");
        return 0;
    }