c語言二維數(shù)組排序函數(shù) c語言二維數(shù)組如何排序

C語言 如何對二維數(shù)組進行按列排序?

無論是多少維的數(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;

}

運行結果:

c語言:定義一個 二維數(shù)組,存放五個字符串,然后用選擇法按從小到大的的順序排序并

#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;

}

如何用C語言的qsort對二維數(shù)組排序?

建議你這樣試試看:

先定義數(shù)組大小:

然后定義一個數(shù)組比較函數(shù):

注意事項:

更安全的調用方式為qsort_s;

然后調用 qsort函數(shù)進行排序,具體邏輯如下:

代碼合并如下:

這里只是根據(jù)你的數(shù)據(jù)生成了二維數(shù)組,可以根據(jù)你的具體情況進行調整;另外,關于qsort函數(shù)的用法,參考:qsort

關于比較函數(shù)的返回值,這里有一個表:

最后,以上代碼的運行結果如下:

如何對二維數(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)

網(wǎng)站建設網(wǎng)站維護公司