無論是多少維的數(shù)組,機內都是一維的,以行優(yōu)先存放。所以直接降為一維數(shù)組排序最方便省事。下面以二維數(shù)組為例寫出代碼——
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網(wǎng)站建設、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的黃龍網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
#include?"stdio.h"
int?main(int?argc,char?*argv[]){
int?x[3][3]={{9,4,3},{6,2,7},{5,8,1}},i,j,k,*p;
printf("Before?ordering?is?as?follows:\n");
for(i=0;i3;i++){
for(j=0;j3;printf("%2d",x[i][j++]));
printf("\n");
}
for(p=(int?*)x,i=0;i9;i++){//用p=(int?*)x將x降為一維數(shù)組p,選擇法排序
for(k=i,j=k+1;j9;j++)
if(p[k]p[j])
k=j;
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j;
}
printf("Sorted?as?follows:\n");
for(i=0;i3;i++){//輸出排序后的二維數(shù)組
for(j=0;j3;printf("%2d",x[i][j++]));
printf("\n");
}
return?0;
}
運行結果:
#include?stdio.h
#include?string.h
#define?N?5??????????//定義符號常量
#define?MAX_LEN?100??//字符串最大長度
void?selectSort(char?(*pt)[MAX_LEN],int?n)??//形參pt為指向二維字符數(shù)組的指針
{
int?i,j,k;
char?tmp[MAX_LEN];??//臨時字符數(shù)組
for(i=0;in-1;i++)??//遍歷所有未排序的字符串的趟數(shù)
{
k=i;??//變量k存放當前最小字符串的下標
for(j=i+1;jn;j++)???????????????//遍歷下標從(i+1)~(n-1)的所有字符串
if(strcmp(pt[k],pt[j])??0)??//字符串進行兩兩大小比較,如果0,則執(zhí)行if語句體
k=j;?????????????????????//將當前最小的字符串的數(shù)組下標賦值給變量k
if(k?!=?i)???????????????????????//如果k不等于i,則執(zhí)行if語句體
{???//兩個字符串進行交換操作
strcpy(tmp,pt[k]);
strcpy(pt[k],pt[i]);
strcpy(pt[i],tmp);
}
}
}
int?main()
{
char?str[N][MAX_LEN];??//定義二維字符數(shù)組
int?i;
printf("輸入字符串:\n");
for(i=0;iN;i++)
scanf("%s",str[i]);
selectSort(str,N);??//調用選擇排序函數(shù)
printf("輸出排序后的字符串:\n");
for(i=0;iN;i++)
printf("%s\n",str[i]);
return?0;
}
建議你這樣試試看:
先定義數(shù)組大小:
然后定義一個數(shù)組比較函數(shù):
注意事項:
更安全的調用方式為qsort_s;
然后調用 qsort函數(shù)進行排序,具體邏輯如下:
代碼合并如下:
這里只是根據(jù)你的數(shù)據(jù)生成了二維數(shù)組,可以根據(jù)你的具體情況進行調整;另外,關于qsort函數(shù)的用法,參考:qsort
關于比較函數(shù)的返回值,這里有一個表:
最后,以上代碼的運行結果如下:
在C語言中,二維數(shù)組按行存儲,對每一行排序很方便,可以把每一行當成一個一維數(shù)組,使用排序函數(shù)直接進行排序。
然而對每一列進行排序,就不能直接當成一維數(shù)組進行排序。但是仍然可以把第j列a[0...M-1][j]在邏輯上當成一維數(shù)組進行排序,下面以使用冒泡排序為例對其排序。
對二維數(shù)組按列排序后,進一步展示了如何調用快速排序函數(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ù)組按行升序排序 (調用快速排序函數(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;}
編譯運行后的結果如下:
本文題目:c語言二維數(shù)組排序函數(shù) c語言二維數(shù)組如何排序
文章源于:http://bm7419.com/article30/dohpppo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供電子商務、移動網(wǎng)站建設、搜索引擎優(yōu)化、域名注冊、面包屑導航、關鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)