c语言指针排序问题

C语言 码拜 9年前 (2016-04-16) 1420次浏览
#include<stdio.h>
int main()
{
void inv(int *arr,int n);
int i,a[10],*p=a;
printf(“请输入十个数\n”);
for(i=0;i<10;i++,p++)
scanf(“%d”,p);
printf(“\n”);
p=a;
inv(a,10);
for(p=a;p<a+10;p++)
printf(“%d “,*p);
printf(“\n”);
}
void inv(int *arr,int n)
{
int t1,t2,*max,*min,k,m;
max=min=p;
for(p=arr;p<arr+n;p++)
{
if(*max<*p)
{
max=p;
k=i;
}
if(*min>*p)
{
min=p;
m=i;
}
}
t1=arr+k;
arr+k=arr+n-1;
arr+n-1=t1;
t2=arr+m;
arr+m=arr;
arr=t2;
}
选择排序法 用指针做   帮本人改改吧  写不动了!
解决方案

10

#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[5];
int i,j,*p,temp;
p=array;
printf("please input some integer:\n");
for(i=0;i<5;i++)
{
scanf("%d",p++);
}
p=array;
printf("排序前为:\n");
for(i=0;i<5;i++)
{
printf("%-5d",*p++);
}
p=array;
for(i=0;i<4;i++)
{
for(j=0;j<4-i;j++)
{
if(*(p+j)>*(p+j+1)) //用指针去引用:
Quote: 引用:

inv函数里问题很多:
1.p是啥?i是啥?
2.t1=arr+k;//t1是int,而arr+k是int *指针
3.arr+k和arr+n-1也不能作为左值
参考别人的选择排序:

/* 版本一 */
#include<stdio.h>
#include<stdlib.h>
 
void swap(int*a,int*b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
void select_sort(int A[],int n)
{
    register int i,j,min,m;
    for(i=0;i<n-1;i++)
    {
        min=i;//查找最小值
        for(j=i+1;j<n;j++)
        {
            if(A[min]>A[j])
            {
                min=j;
            }
        }
        if(min!=i)
        {
            swap(&A[min],&A[i]);
            printf("第%d趟排序结果为:\n",i+1);
            for(m=0;m<n;m++)
            {
                if(m>0)
                {
                    printf("");
                }
                printf("%d",A[m]);
            }
            printf("\n");
        }
    }
}
int main(void)
{
    int n;
    while(scanf("%d",&n)!=EOF)    /* VS2013等版本中需使用scanf_s(),VC6.0中使用scanf() */
    {
        int i;
        int*A=(int*)malloc(sizeof(int)*n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&A[i]);
        }
        select_sort(A,n);
        printf("最终排序结果为:\n");
        for(i=0;i<n;i++)
        {
            if(i>0){
                printf("");
            }
            printf("%d",A[i]);
        }
        printf("\n");
    }
    return 0;
}
 
 
 
/* 版本二 */
#include <stdio.h>
#include <math.h>
 
#define MAX_SIZE 101
#define SWAP(x, y, t)  ((t) = (x), (x) = (y), (y) = (t))
 
void sort(int[], int);      /* selection sort */
 
void main(void)
{
    int i, n;
    int list[MAX_SIZE];
    printf("Enter the number of numbers to generate: ");
    scanf_s("%d", &n);
    if (n < 1 || n > MAX_SIZE){
        fprintf(stderr, "Improper value of n\n");
        exit(1);
    }
    for (i = 0; i < n; i++){    /* randomly generate numbers */
        list[i] = rand() * 1000;
        printf("%d ", list[i]);
    }
    sort(list, n);
    printf("\n Sorted array:\n");
    for (i = 0; i < n; i++)    /* print out sorted numbers */
        printf("%d ", list[i]);
    printf("\n");
}
 
 
void sort(int list[], int n)
{
    int i, j, min, temp;
    for (i = 0; i < n - 1; i++){
        min = i;
        for (j = i + 1; j < n; j++)
        if (list[j] < list[min])
            min = j;
        SWAP(list[i], list[min], temp);
    }
}

#include<stdio.h>
int main()
{
void inv(int *arr,int n);
int i,a[10],*p=a;
printf(“请输入十个数\n”);
for(i=0;i<10;i++,p++)
scanf(“%d”,p);
printf(“\n”);
p=a;
inv(a,10);
for(p=a;p<a+10;p++)
printf(“%d “,*p);
printf(“\n”);
}
void inv(int *arr,int n)
{
int t1,t2,*max,*min,*p;
max=min=arr;
for(p=arr+1;p<arr+n;p++)
{
if(*max<*p)
{
max=p;
}
if(*min>*p)
{
min=p;
}
}
t1=arr[0];
arr[0]=*min;
*min=t1;
t2=arr[n-1];
arr[n-1]=*max;
*max=t2;
}
本人改好了  你看看这样行不行

测试了下结果没啥问题

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c语言指针排序问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)