user-0 提问: c语言指针排序问题

回复:
user: user-1
content: 引用 5楼我是你的主体 的回复:[quote=引用 2 楼 qq423399099 的回复:] 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; } 我改好了  你看看这样行不行[/quote]测试了下结果没啥问题

user: user-0
content: 引用 2 楼 qq423399099 的回复: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; } 我改好了  你看看这样行不行

user: user-0
content: 引用 1 楼 user-3 的回复:#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)) //用指针去引用数组中的元素并进行比较 { temp=*(p+j);  *(p+j)=*(p+j+1); *(p+j+1)=temp; } } } printf("排序之后：\n"); for(i=0;i<5;i++) { printf("%-5d",*p++); } return 0; } 这是冒泡排序，不过建议还是自己写写吧，从你的代码中可以看出，你对 C 的基础都不清楚呢~   恩 对啊，指针还没有学完呢。。我现在是各种混乱。。

user: user-2
content: 回答的都很很六！！

user: user-1
content: 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);     } }

user: user-3
content: #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)) //用指针去引用数组中的元素并进行比较 { temp=*(p+j);  *(p+j)=*(p+j+1); *(p+j+1)=temp; } } } printf("排序之后：\n"); for(i=0;i<5;i++) { printf("%-5d",*p++); } return 0; } 这是冒泡排序，不过建议还是自己写写吧，从你的代码中可以看出，你对 C 的基础都不清楚呢~