我在使用指針 例如有疑問我在此交換程序和交換,所以我有爲了保持相同的地址使用指針,其中交換正在發生指針在C,而使用陣列和交換功能
#include<stdio.h>
int swap(int *x,int *y); //swapping function
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("A->%d,B->%d\n",a,b); //print original array
swap(&a,&b); //pass by reference
printf("A->%d,B->%d\n",a,b); //print sorted array
}
int swap(int *x,int *y)
{
int temp; // Swapping
temp =*x;
*x=*y;
*y=temp;
}
然後我寫了一個合併排序的程序。在這裏,我只是在函數中傳遞值(通過值傳遞)而不使用指針,但是當我在主函數中打印排序後的數組時,它將被排序。
#include<stdio.h>
void merge(int a[],int start,int mid,int end); //Sorting and merging lists
void mergesort(int a[],int start,int end); //Dividing the list
int main()
{
int size,i;
scanf("%d",&size);
int arr[size];
for(i=0;i<size;i++) //Input array
{
scanf("%d",&arr[i]);
}
printf("Array is: ");
for(i=0;i<size;i++)
{
printf("%d ",arr[i]); //print original array
}
printf("\n");
mergesort(arr,0,size-1); //Mergesort call-pass by value
printf("Sorted Array is: ");
for(i=0;i<size;i++)
{
printf("%d ",arr[i]); //print sorted array
}
printf("\n");
}
void mergesort(int a[],int start,int end)
{
int mid;
if(start<end)
{
mid=(start+end)/2; //calculating mid and dividing array recursively
mergesort(a,start,mid);
mergesort(a,mid+1,end);
merge(a,start,mid+1,end);
}
}
void merge(int a[],int start,int mid,int end)
{
int b[end]; //auxillary array
int i;
int p=start,q=mid,k=start;
while((p<mid) && (q<=end)) //comparing both list
{
if(a[p]<=a[q])
{
b[k++]=a[p++];
}
else
{
b[k++]=a[q++];
}
}
while(p<mid) //adding remaing items to auxillary array
{
b[k++]=a[p++];
}
while(q<=end) //adding remaing items to auxillary array
{
b[k++]=a[q++];
}
for(i=start;i<k;i++) //copying items from auxillary array to original array
{
a[i]=b[i];
}
}
這是怎麼發生的?
請格式化您的代碼。 –
對於int_swap,你應該使用'void'而不是'int',因爲它實際上並沒有返回任何東西。 – RoadRunner
int arr [size];是無效的陳述。 – dreamBegin