建議你這樣試試看:
創(chuàng)新互聯(lián)建站憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗,為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個人等客戶提供了成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)服務(wù),以良好的商業(yè)信譽,完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。
先定義數(shù)組大?。?/p>
然后定義一個數(shù)組比較函數(shù):
注意事項:
更安全的調(diào)用方式為qsort_s;
然后調(diào)用 qsort函數(shù)進行排序,具體邏輯如下:
代碼合并如下:
這里只是根據(jù)你的數(shù)據(jù)生成了二維數(shù)組,可以根據(jù)你的具體情況進行調(diào)整;另外,關(guān)于qsort函數(shù)的用法,參考:qsort
關(guān)于比較函數(shù)的返回值,這里有一個表:
最后,以上代碼的運行結(jié)果如下:
#include?stdio.h
#include?"stdlib.h"
#include?"time.h"
int?main(int?argc,char?*argv[]){
int?a[5][8],i,j,k,t,*p;
printf("排序前:\n");
srand((unsigned)time(NULL));
for(i=0;i5;i++){//為二維數(shù)組賦值
for(j=0;j8;printf("%3d",a[i][j++]=rand()%100));
printf("\n");
}
printf("排序后:\n");
p=(int?*)a;//降為一維,這樣排序簡單
for(t=i=0;i40;i++){//選擇法排序
for(k=i,j=k+1;j40;j++)
if(p[k]p[j])
k=j;
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j;
printf(++t%8???"%3d"?:?"%3d\n",p[i]);
}
return?0;
}
在C語言中,二維數(shù)組按行存儲,對每一行排序很方便,可以把每一行當成一個一維數(shù)組,使用排序函數(shù)直接進行排序。
然而對每一列進行排序,就不能直接當成一維數(shù)組進行排序。但是仍然可以把第j列a[0...M-1][j]在邏輯上當成一維數(shù)組進行排序,下面以使用冒泡排序為例對其排序。
對二維數(shù)組按列排序后,進一步展示了如何調(diào)用快速排序函數(shù)按行進行排序。
程序源碼:
#include?stdio.h
#include?stdlib.h
#define?M?3
#define?N?3
//輸出二維數(shù)組的函數(shù)
void?print(int?a[][N])
{
int?i,j;
for(i=0;iM;i++)
{
for(j=0;jN;j++)
{
printf("%d?",a[i][j]);
}
printf("\n");
}?
}
//qsort的cmp函數(shù)
int?cmp(const?void*a,?const?void?*b)
{
return?*(int*)a-*(int*)b;
}
int?main(int?argc,?char*?argv)
{
int?a[M][N]={3,2,1,9,8,7,6,5,4};
printf("按列排序前的二維數(shù)組是:\n");
print(a);
printf("\n");
int?j;
for(j=0;jN;j++)//對每一列進行升序排序?
{
//對第j列進行排序?
int?m,n;
int?t;
for(m=M-1;m0;m--)
{
for(n=0;nm;n++)
{
if(a[n][j]a[n+1][j])
{
t=a[n][j];
a[n][j]=a[n+1][j];
a[n+1][j]=t;
}
}?
}?
}?
printf("按列排序后二維數(shù)組變?yōu)椋篭n");
print(a);
printf("\n");?
//對按列排序后的二維數(shù)組按行升序排序?(調(diào)用快速排序函數(shù))?
int?i;
for(i=0;iM;i++)
{
qsort(a[i],N,sizeof(a[i][0]),cmp);
}?
printf("按列排序后再按行排序后二維數(shù)組變?yōu)椋篭n");
print(a);
printf("\n");
system("pause");
return?0;
}
編譯運行后的結(jié)果如下:
程序源碼和編譯后的可執(zhí)行程序已經(jīng)打包放在附件里,可以直接下載運行。
1、打開Visual Studio工具并創(chuàng)建一個新的Win32程序。
2、在打開的C語言文件中,導(dǎo)入stdio.h空間,然后準備一個main函數(shù)。
3、接下來,準備一個需要進行冒泡排序的整數(shù)數(shù)組。如下圖所示,數(shù)組中數(shù)字的順序是不正常的。
4、接下來,準備變量,準備好的變量用于對交互數(shù)據(jù)進行排序。
5、然后我們準備兩個for循環(huán)數(shù)組,我們需要注意外循環(huán)和內(nèi)循環(huán)。