我的問題是我在解決一些練習時遇到障礙。 問題的根源在於我必須編寫一個程序,按每個元素除數的數量對數組進行降序排序,但是當兩個元素具有相同數量的除數時,應按升序排序這些值。 到目前爲止我的代碼:如何根據除數的數量對數組元素進行排序?
#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
輸出:
100 12 20 4 13
雖然它工作正常,這一個和其他許多。對於更大的輸入,它會超出時間限制0.1s
。任何建議如何重寫排序? (我寫了氣泡排序,因爲我無法通過屬性通過快速排序實現排序數組)
這是沒有諮詢網站。並且沒有語言C/C++。你的代碼是C++,而不是C!重新表現:你已經自己回答了你的問題。 – Olaf
*「我無法通過快速排序按屬性排序數組」* - 我不明白這是什麼意思。你爲什麼不能實施快速排序? –
其實我什麼都聽不懂。英語不是他的第一語言 –