Hier, bitte.
#include <stdio.h>
int main(void)
{
int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 1 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int * pointersArray[] = { arr1, arr2, arr3, arr4, arr5 };
const size_t N = sizeof(pointersArray)/sizeof(*pointersArray);
for (size_t k = 0; k < N; ++k)
{
size_t n = *pointersArray[k];
for (size_t i = 0; i < n; i++)
{
for (size_t j = 1; j < n - i; j++)
{
if (pointersArray[k][j+1] < pointersArray[k][j])
{
int tmp = pointersArray[k][j+1];
pointersArray[k][j+1] = pointersArray[k][j];
pointersArray[k][j] = tmp;
}
}
}
}
for (size_t k = 0; k < N; ++k)
{
size_t n = *pointersArray[k] + 1;
for (size_t i = 0; i < n; i++) printf("%d ", pointersArray[k][i]);
printf("\n");
}
}
Die Programmausgabe ist
3 6 7 9
2 1 5
0
1 6
4 1 2 5 6
berücksichtigen, dass es einfacher wäre, und der Code aussehen würde klarer, wenn Sie die Standard-C-Funktion verwenden qsort
stattdessen die Blase Sortierfunktion manuell zu schreiben.
Zum Beispiel
#include <stdlib.h>
#include <stdio.h>
int cmp(const void *lhs, const void *rhs)
{
int a = *(int *)lhs;
int b = *(int *)rhs;
return (b < a) - (a < b);
}
int main(void)
{
int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 1 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int * pointersArray[] = { arr1, arr2, arr3, arr4, arr5 };
const size_t N = sizeof(pointersArray)/sizeof(*pointersArray);
for (size_t i = 0; i < N; ++i)
{
qsort(pointersArray[i] + 1, *pointersArray[i], sizeof(int), cmp);
}
for (size_t k = 0; k < N; ++k)
{
size_t n = *pointersArray[k] + 1;
for (size_t i = 0; i < n; i++) printf("%d ", pointersArray[k][i]);
printf("\n");
}
}
Der Ausgang der gleiche sein wird wie oben
3 6 7 9
2 1 5
0
1 6
4 1 2 5 6
In C++ gezeigt können Sie Standard-Algorithmus std::sort
in Header deklariert verwenden <algorithm>
. Zum Beispiel
#include <iostream>
#include <algorithm>
int main()
{
int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 1 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int * pointersArray[] = { arr1, arr2, arr3, arr4, arr5 };
for (auto p : pointersArray)
{
std::sort(p + 1, p + 1 + *p);
}
for (auto p : pointersArray)
{
size_t n = *p + 1;
for (size_t i = 0; i < n; i++) std::cout << p[i] << ' ';
std::cout << std::endl;
}
}
Der Ausgang ist
3 6 7 9
2 1 5
0
1 6
4 1 2 5 6
Was ist die erwartete Ausgabe? – flaviodesousa
Ja - Sie könnten versuchen, es zu debuggen. –
Refactor die innerste Schleife in eine Vergleichsfunktion. (Sie sollten wahrscheinlich aus der Schleife ausbrechen, sobald Sie verschiedene Gegenstände gefunden haben.) –