このコードは、配列の最初の要素がどれだけ最初の要素の後ろにあるかを示すポインタの配列をソートするために作成したものです。今私はコードを並べ替える(並べ替えソートまたは他の並べ替え)すべての行を自分で、最初の要素を保持する(彼は私たちに配列のサイズを教えているので)。大規模な配列の配列でfisrt配列をソートするコードですが、最後の配列(4,5,6,2,1)では機能しません。いずれかを助ける?関数の!(いない[と])でポインタのみを使用:)ポインタを使った2次元配列のソートコード
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 5
void sortArrayAfterFirstPlace(int* pointersArray[], int len);
void printsMatrix(int* pointersArray[], int len);
int main(void)
{
int firstArr[4] = { 3,9,6,7 };
int secondArr[3] = { 2, 5, 5 };
int thirdArr[1] = {0};
int forthArr[2] = {1,6};
int fifthArr[5] = {4,5,6,2,1};
int* arrOfPointers[LENGTH] = { firstArr, secondArr,thirdArr,forthArr,fifthArr };
sortArrayAfterFirstPlace(arrOfPointers,LENGTH);
printsMatrix(arrOfPointers,LENGTH);
system("PAUSE");
return 0;
}
/*
*/
void sortArrayAfterFirstPlace(int* pointersArray[], int len)
{
int i = 0,j=0,temp=0;
int min = 0;
int lengthOfFirstElement = 0;
for (i = 0; i < len; i++)
{
lengthOfFirstElement = *(*(pointersArray + i));
for (j = i+1; j < lengthOfFirstElement; j++)
{
if (*(*(pointersArray + i) + j) > *(*(pointersArray + i) + j + 1))
{
temp = *(*(pointersArray + i) + j);
*(*(pointersArray + i) + j) = *(*(pointersArray + i) + j + 1);
*(*(pointersArray + i) + j + 1) = temp;
}
}
}
}
/*
*/
void printsMatrix(int* pointersArray[],int len)
{
int i = 0,j=0;
int lengthOfFirstElement = 0;
for (i = 0; i < len; i++)
{
lengthOfFirstElement = *(*(pointersArray+i));
for (j = 0; j <lengthOfFirstElement+1; j++)
{
printf("%d ", *(*(pointersArray + i) + j));
}
printf("\n");
}
}
は、あなたがこれまでのデバッグについて何かを聞いたことがあります... – LPs
各アレイは、正しく並べ替えるために、2つの 'for'ループ(または類似した構造)を必要とします。束の配列をソートするには、3つの 'for'ループが必要です(配列をソートするために外側を選択し、内側を配列をソートします)。 *良いオプションは、関数内の内部ループを「隠す」ことです。 – pmg