急求!!!用c语言编写一个qsort函数,要求是对一个二位数组按每一个元素最后一个元素从小到大排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急求!!!用c语言编写一个qsort函数,要求是对一个二位数组按每一个元素最后一个元素从小到大排序相关的知识,希望对你有一定的参考价值。
比如说有这么一个二位数组
array[6][2]=
4,9,
2,6,
4,5,
1,2,
1,7,
2,4
把它排成:
1,2,
2,4,
4,5,
2,6,
1,7,
4,9,
先看程序的运行结果,看是不是你需要的。
代码如下,有不清楚的可以追问
#include <stdio.h>#include <stdlib.h>
#include <string.h>
int printArray(int array[][2], int dim1, int dim2 );
int swap(int *a, int *b);
int qsort(int array[][2]);
int main()
int array[6][2] = 4, 9, 2, 6, 4, 5, 1, 2, 1, 7, 2, 4;
printf("排序前:\\n");
printArray(array, 6, 2);
qsort(array);
printf("排序后:\\n");
printArray(array, 6, 2);
return 0;
int qsort(int array[][2])
int i = 0;
int j = 0;
for( i = 0; i < 6; i++)
for(j = i+1; j < 6; j++)
if(*(*(array+i)+1) > *(*(array+j)+1))
swap(&*(*(array+i)+0), &*(*(array+j)+0));
swap(&*(*(array+i)+1), &*(*(array+j)+1));
return 0;
int swap(int *a, int *b)
*a = (*a) + (*b);
*b = (*a) - (*b);
*a = (*a) - (*b);
return 0;
int printArray(int array[][2], int dim1, int dim2 )
int i = 0;
int j = 0;
for( i = 0; i < dim1; i++)
for(j = 0; j < dim2; j++)
printf("%d ", *(*(array+i)+j));
printf("\\n");
return 0;
参考技术A #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int qssort(int a[][2])
int i = 0;
int j = 0;
for (i = 0; i < 6; i )
for (j = i 1; j < 6; j )
if (*(*(a i) 1) > *(*(a j) 1))
swap(&*(*(a i) 0), &*(*(a j) 0));
swap(&*(*(a i) 1), &*(*(a j) 1));
return 0;
int swap(int *a, int *b)
*a = (*a) (*b);
*b = (*a) - (*b);
*a = (*a) - (*b);
return 0;
int printArray(int a[][2], int dim1, int dim2)
int i = 0;
int j = 0;
for (i = 0; i < dim1; i )
for (j = 0; j < dim2; j )
printf("%d ", *(*(a i) j));
printf("\n");
return 0;
int main()
int a[6][2];
int i, j;
printf("输入12个数:");
for (i = 0; i < 6; i )
for (j = 0; j < 2; j )
scanf("%d", &a[i][j]);
printf("排序前:\n");
printArray(a, 6, 2);
qssort(a);
printf("排序后:\n");
printArray(a, 6, 2);
return 0;
希望采纳
解决没啊? 参考技术B #include<stdio.h>
int qsort(int s[6][2])
int j,i,key,k=0;
for(j=1;j<6;j++)
key=s[j][1];
i=j-1;
while(i>=0&&s[i][1]>key)
s[i+1][1]=s[i][1];
i=i-1;
s[i+1][1]=key;
for(i=0;i<6;i++)
k=0;
for(j=0;j<2;j++)
if(k==0)
printf("(");
printf("%d ",s[i][j]);
k++;
if(k==2)
printf(")");
printf("\n");
return 0;
int main()
int a[6][2],i,j;
printf("请输入12个数");
for(i=0;i<6;i++)
for(j=0;j<2;j++)
scanf("%d",&a[i][j]);
qsort(a);
// for(j=0;j<2;j++)
// printf("%d ",a[i][j]);
对不起 弄晚了,一直搞调试。本回答被提问者和网友采纳
C语言用qsort函数对二维数组第一列排序,这个
C语言用qsort函数对二维数组第一列排序,这个int cmp(const int *p1,const int *p2)
return p2[0]-p1[0];
哪错了,怎么改?
return *((int*)p2)-*((int*)p1);
以上是关于急求!!!用c语言编写一个qsort函数,要求是对一个二位数组按每一个元素最后一个元素从小到大排序的主要内容,如果未能解决你的问题,请参考以下文章