2015-12-06 5 views
-5

У меня было несколько часов, думая о возможном решении этой проблемы, и я получил один, но слишком длинный, и я думаю, что я сделал решение труднее обычного.C - Sort Array Desc

Можете ли вы помочь мне достичь этого результата в C?

ввода (пример):

int input[4] = {40, 10, 50, 23} 
    //The solution would be 2, 0, 3 ,1 
    input[0] = 40; 
    input[1] = 10; 
    input[2] = 50; 
    input[3] = 23; 

Что я хочу:

int order[4] = {2, 0, 3, 1} 

Кстати, мне нужно сохранить массив ввода, так что я на самом деле нужно создать другой для заказа.

Edit:

Ну я изменил код, и это работает для меня, Thx ребята.

for (i = 0; i < 4; i++) 
{ 
    for (j = 0; j < 4; j++) 
    { 
     if (i==j) 
      continue; 
     if (decimalpart[i]<decimalpart[j]) 
      ordem[i]++; 
    } 
} 

Это работает с удвоениями/поплавками. Это не был конкретный пример, список массивов был случайным.

+1

Возьмем ассоциативный массив индекса и сортировки, что, используя значение этого индекса в 'input' массива. – ashiquzzaman33

+0

Мое решение было похоже на 'int order [4] = {0,1,2,3}', а затем изменить индекс, чтобы он соответствовал решению, но это способ догадываться (алгоритм). – Exprove

+0

Что случилось с сортировкой 'int order [4] = {0,1,2,3}' путем сравнения 'input [order [i]]' для элемента 'i'? – jods

ответ

1

Здесь вы:

int i,j; 
int input[] = {40, 10, 50, 23}; 
int size = sizeof(input)/sizeof(int); 
int order[size]; 
for (i = 0; i < size; i++) { 
    order[i] = 0; 
} 
for (i = 0; i < size; i++) { 
    for (j = 0; j < size; j++) { 
     if (i==j) { 
      continue; 
     } 
     if (input[i]>input[j]) { 
      order[i]++; 
     } 
    } 
} 
for (i = 0; i < size; i++) { 
    printf("%d, ",order[i]); 
} 
+1

результат неверен, если на входе присутствует такое же значение. – BLUEPIXY

+1

и это O (N^2). –

+1

@ BLUEPIXY я знаю, но он не писал о том, как следует обрабатывать эту возможность, поэтому, если он попробует мой код, он в этом случае ответит, что должна делать программа. –