如何使用指针执行冒泡排序

时间:2013-04-28 16:08:04

标签: c sorting bubble-sort

我已经使用Pointers为Bubble Sort编写了这段代码,但是我遇到了LVALUE所需的错误。

这是我的代码。请修复此代码。我基本上在交换语法时遇到错误。请帮忙

#include<stdio.h>
#include<conio.h>
void sort(int *a,int n);
void main()
{
    int a[20];
    int n,i;
    clrscr();
    printf("Program for BUBBLE SORT\n");
    printf("Enter the Number of ELements you want in Array\n");
    scanf("%d",&n);
    printf("Enter the Elements in UNSOTED ARRAY\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("The Unsorted ARRAY is:\n");
    for(i=0;i<n;i++)
    {
        printf("%d\t",a[i]);
    }
    printf("\n");
    sort(&a,n);
    getch();
}
void sort(int *a,int n)
{
    int i,temp,j;
    for(i=1;i<n;i++)
    {
        for(j=0;j<n-i;j++)
        {
            if((*a+j)==(*a+j+1))
            {
                temp=*a+j;
                *a+j=*a+j+1;
                *a+j+1=temp;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:8)

最好让你的交换部分如下:

temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;

特别是如果您是C语言的初学者,使用指针数学进行简单数组访问的花哨语法无助于您理解自己的代码。

此外,你可能想要调用你的排序函数:sort(a, n),因为a已经在C中表示&a[0]。如果你开始投入更多的参考操作符,你最终会访问除你想要的以外的其他内存。

答案 1 :(得分:1)

你只是缺少几个括号:

if(*(a+j)==*(a+j+1))
{
    temp=*(a+j);
    *(a+j)=*(a+j+1);
    *(a+j+1)=temp;
}

它们是必需的,因为你想将j添加到a,然后以取消引用该地址。