冒泡在C中排序

时间:2014-02-02 08:05:42

标签: c sorting

我正在尝试在C中实现冒泡排序并且已经到了这么远但它的排序也不正确。

#include<stdio.h>

int main()
{
    int n, i, j, a[5], b, temp;
    printf("Enter the number of elements to be sorted\n");
    scanf("%d", &n);
    for(i = 0; i < n; ++i)
    {
        printf("%d - Enter the elements - ", i);
        scanf("%d", &a[i]);
    }
    for(i = 0; i < n; ++i)
    {
        for(j = 0; j < n+1; ++j)
        {
            if(a[i] > a[i+1])
            {
                temp = a[i];
                a[i] = a[i+1];
                a[i+1] = temp;
            }
        }
    }
    for (i = 0; i < n; ++i)
    {
        printf("%d\n", a[i]);
    }
    return 0;
}

输入

2
12
1
13

输出

2
1
12
13

我错过了什么?

6 个答案:

答案 0 :(得分:3)

所以现在戏剧已经过去了,你的代码的问题在于你没有在你的内循环中使用正确的索引。另外你的内循环计数器的条件检查不正确。此外,正如我在您的问题的评论中提到的,您在代码中有一个缺陷(我没有修复),在您询问用户要输入多少元素之前初始化数组。如果用户输入的数字大于5,则可能导致索引超出范围。

#include<stdio.h>

int main()
{
    int n, i, j, a[5], b, temp;
    printf("Enter the number of elements to be sorted\n");
    scanf("%d", &n);
    for(i = 0; i < n; ++i)
    {
        printf("%d - Enter the elements - ", i);
        scanf("%d", &a[i]);
    }
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n-1; j++)
        {
            if(a[j] > a[j+1])
            {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
    for (i = 0; i < n; ++i)
    {
        printf("%d\n", a[i]);
    }
    return 0;
}

答案 1 :(得分:2)

你的第二个循环不合适。

for(j=0;j<n-i-1;j++){
}

答案 2 :(得分:1)

/*By your approach , in inner loop you are not checking the each elements . So change i to j in swapping , and limit of j should be till n-1*/


  #include<stdio.h>

int main()
{
int n, i, j, a[10], b, temp=0;
printf("Enter the number of elements to be sorted\n");
scanf("%d", &n);
for(i = 0; i < n; ++i)
{
    printf("%d - Enter the elements - ", i);
    scanf("%d", &a[i]);
}
for(i = 0; i < n; ++i)
{
    for(j = 0; j < n-1; ++j)     // notice limit , also complexity can be reduced by changing        to(j<n-i-1)
    {
        if(a[j] > a[j+1])
        {
            temp = a[j];        // changed variable 
            a[j] = a[j+1];
            a[j+1] = temp;
        }
    }
}
for (i = 0; i < n; ++i)
{
    printf("%d\n", a[i]);
}
return 0;
 }

答案 3 :(得分:1)

Cores

答案 4 :(得分:1)

我已尝试涵盖所有可能的条件,以减少通过次数和气泡排序比较,以减少总体时间。这是我的代码...

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

void bubbleSort(int n){
    int arr[n],i,j,temp=0;
    int swapFlag = 0;

    printf("\nInsert %d elements:\n",n);
    for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
    printf("Insert complete.\n\n");

    printf("Your array looks like:\n");
    for(i=0;i<n;i++){
        printf("%d ",arr[i]);
    }

    //Bubble Sort Algorithm
    for(i=0;i<n-1;i++){
        swapFlag = 0;
        for(j=0;j<n-i-1;j++){
            if(arr[j]>arr[j+1]){
                swapFlag = 1;
                //Swapping unordered pairs
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        //Condition to reduce number of passes & comparisons
        if(swapFlag == 0){
            break;
        }
    }

    printf("\n\nAfter sorting the array looks like:\n");
    for(i=0;i<n;i++){
        printf("%d ",arr[i]);
    }
}

void main(){
    int n;
    printf("Enter number of array elements: ");
    scanf("%d",&n);
    bubbleSort(n);
    getch();
}

结果:-

Bubble Sort Implementation

答案 5 :(得分:0)

/*You May check this code it will help you*/
#include<stdio.h>
void bubble_sort(int a[],int n);
void bubble_sort(int a[],int n)
{
    int i,j;
    int temp;

    for(i=0;i<n;i++)
    {
        for (j=0; j<=n-i-1;j++)
        {
            if (a[j]>a[j+1])
            {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }

    }
}
main()
{
    int a[10];
    int i,n;
    printf("Enter the number\n");
    scanf("%d",&n);
    printf("Enter the number\n");
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    bubble_sort(a,n);
    printf("sorted elements are\n");
    for(i=0;i<n;i++)
    printf("%d\n",a[i]);
}