本文目錄一覽:
- 1、C語言 對二維數組a【5】【10】進行從大到小排序 我是新手,代碼越簡單越好
- 2、如何用C語言的qsort對二維數組排序?
- 3、C語言 如何對二維數組進行按列排序?
- 4、C語言程序題,根據二維數組第二個數的大小排序從小到大。
- 5、C語言:有二維數組a[N][M],用冒泡排序法對二維數組中的每一行數據進行由小到大的排序,然後輸出
- 6、C語言!(二維數組統一排序)
C語言 對二維數組a【5】【10】進行從大到小排序 我是新手,代碼越簡單越好
#include stdio.h
int main()
{
int i,j,t,k=0,a[5][10],b[50];
for(i=0;i5;i++)
for(j=0;j10;j++)
{
scanf(“%d”,a[i][j]);
b[k]=a[i][j];k++;
}
for(i=0;i49;i++)
for(j=i+1;j50;j++)
if(b[i]b[j])
{t=b[i];b[i]=b[j];b[j]=t;}
k=0;
for(i=0;i5;i++)
{
for(j=0;j10;j++)
{
a[i][j]=b[k];
k++;
printf(“%d “,a[i][j]);
}
printf(“\n”);
}
return 0;
}
如何用C語言的qsort對二維數組排序?
建議你這樣試試看:
先定義數組大小:
然後定義一個數組比較函數:
注意事項:
更安全的調用方式為qsort_s;
然後調用 qsort函數進行排序,具體邏輯如下:
代碼合併如下:
這裡只是根據你的數據生成了二維數組,可以根據你的具體情況進行調整;另外,關於qsort函數的用法,參考:qsort
關於比較函數的返回值,這裡有一個表:
最後,以上代碼的運行結果如下:
C語言 如何對二維數組進行按列排序?
無論是多少維的數組,機內都是一維的,以行優先存放。所以直接降為一維數組排序最方便省事。下面以二維數組為例寫出代碼——
#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降為一維數組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++){//輸出排序後的二維數組
for(j=0;j3;printf(“%2d”,x[i][j++]));
printf(“\n”);
}
return 0;
}
運行結果:
C語言程序題,根據二維數組第二個數的大小排序從小到大。
#include stdio.h
void sort(int a[][2],int n) {
int i,j,k,t;
for(i = 0; i n – 1; ++i) {
k = i;
for(j = i + 1; j n; ++j) {
if(a[k][1] a[j][1])
k = j;
}
if(k != i) {
for(j = 0; j 2; ++j) {
t = a[k][j];
a[k][j] = a[i][j];
a[i][j] = t;
}
}
}
}
int main() {
int a[12][2] = {1,3,3,4,0,7,3,8,15,19,15,20,10,15,8,18,6,12,5,10,4,14,2,9};
int i,j;
printf(“排序前:\n”);
for(i = 0; i 12; ++i) {
for(j = 0; j 2; ++j)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
sort(a,12);
printf(“排序後:\n”);
for(i = 0; i 12; ++i) {
for(j = 0; j 2; ++j)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
return 0;
}
C語言:有二維數組a[N][M],用冒泡排序法對二維數組中的每一行數據進行由小到大的排序,然後輸出
void px( int *a, int n ) //冒泡排序函數
{
int i,j,t;
for( i=0;in-1;i++)
for( j=0;jn-1-i;j++)
if ( a[j] a[j+1] )
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
void main()
{
int a[N][M];
int i,j;
for( i=0;iN;i++ )
{
px( a[i], M );
for( j=0;jM;j++ )
{
printf(“%d “, a[i][j] );
}
printf(“\n”);
}
}
C語言!(二維數組統一排序)
#include stdio.h
void bubble(int *a,int n) /*定義兩個參數:數組首地址與數組大小*/
//冒泡
{
int i,j,temp;
for(i=0;in-1;i++)
for(j=i+1;jn;j++) /*注意循環的上下限*/
if(a[i]a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
void selectsort(int *a,int n) //選擇排序
{
int i,j,k,temp;
for(i=0;in-1;i++) {
k=i; /*給記號賦值*/
for(j=i+1;jn;j++)
if(a[k]a[j]) k=j; /*是k總是指向最小元素*/
if(i!=k) { /*當k!=i是才交換,否則a[i]即為最小*/
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
void quick(int *a,int i,int j) //快排
{
int m,n,temp;
int k;
m=i;
n=j;
k=a[(i+j)/2]; /*選取的參照*/
do {
while(a[m]kmj) m++; /* 從左到右找比k大的元素*/
while(a[n]kni) n–; /* 從右到左找比k小的元素*/
if(m=n) { /*若找到且滿足條件,則交換*/
temp=a[m];
a[m]=a[n];
a[n]=temp;
m++;
n–;
}
}while(m=n);
if(mj) quick(a,m,j); /*運用遞歸*/
if(ni) quick(a,i,n);
}
void insert(int *a,int n) //插入
{
int i,j,temp;
for(i=1;in;i++) {
temp=a[i]; /*temp為要插入的元素*/
j=i-1;
while(j=0tempa[j]) { /*從a[i-1]開始找比a[i]小的數,同時把數組元素向後移*/
a[j+1]=a[j];
j–;
}
a[j+1]=temp; /*插入*/
}
}
int main()
{
int n,a[100],i,k;
printf(“請輸入有多少個數?\n”);
scanf(“%d”,n);
printf(“依次輸入數組元素\n”);
for (i=0;in;i++)
scanf(“%d”,a[i]);
printf(“請輸入1,2,3,4選擇排序算法\n”);
scanf(“%d”,k);
switch(k)
{
case 1:bubble(a,n);break;
case 2:selectsort(a,n);break;
case 3:quick(a,0,n-1);break;
default:insert(a,n);break;
}
printf(“結果為\n”);
for (i=0;in;i++)
printf(“%d “,a[i]);
return 0;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/312485.html