Mein Problem ist, dass ich ein Hindernis getroffen habe, während ich einige Übungen gelöst habe. Die Quelle des Problems ist, dass ich ein Programm schreiben muss, das absteigend ein Array nach der Anzahl der Teiler jedes Elements sortiert, aber wenn zwei Element die gleiche Anzahl von Teilern hat, sollte es aufsteigend diese Werte sortieren. Mein Code so weit:Wie kann ich Array-Elemente nach Anzahl der Teiler sortieren?
#include <iostream>
#include <fstream>
using namespace std;
int cntDiv(int n) //get number of divisors
{
int lim = n;
int c = 0;
if(n == 1)
return 1;
for(int i = 1; i < lim; i++)
{
if(n % i == 0)
{
lim = n/i;
if(lim != i)
c++;
c++;
}
}
return c;
}
int main()
{
ifstream fin("in.txt");
int n, i, j;
fin >> n;
int v[n];
for(i = 0; i < n; i++)
fin >> v[i];
int div[n];
for(i = 0; i < n; i++)
div[i] = cntDiv(v[i]);
for(i = 0; i < n - 1; i++)
{
for(j = i + 1; j < n; j++)
{
if(div[i] < div[j] && div[i] != div[j]) //if the number of divisors are different
{
int t = v[i];
v[i] = v[j];
v[j] = t;
t = div[i];
div[i] = div[j];
div[j] = t;
}
if(div[i] == div[j] && v[i] > v[j]) //if the number of divisors are the same
{
int t = v[i];
v[i] = v[j];
v[j] = t;
}
}
}
for(i = 0; i < n; i++)
{
cout << v[i] << " ";
}
return 0;
}
In.txt:
5
12 20 4 100 13
Ausgang:
100 12 20 4 13
Obwohl es funktioniert gut mit diesem und vielen anderen. Bei größeren Eingängen überschreitet sie das Zeitlimit 0.1s
. Irgendwelche Ratschläge wie soll ich die Sortierung umschreiben? (Ich schrieb Blasensortierung, weil ich Sortierung Array für Eigenschaft über Quicksort nicht implementieren konnte)
Dies ist keine Beratung Website. Und es gibt keine Sprache C/C++. Ihr Code ist C++, nicht C! Zur Leistung: Sie haben Ihre Frage bereits selbst beantwortet. – Olaf
* "Ich konnte Array über Eigenschaft per Quicksort nicht sortieren" * - Ich verstehe nicht, was das bedeutet. Warum konnten Sie Quicksort nicht implementieren? –
Ich konnte eigentlich nichts verstehen. Englisch ist nicht seine Muttersprache –