Un array di lunghezza N può contenere valori 1,2,3 ... N ^ 2. E 'possibile ordinare in O (n)?

StackOverflow https://stackoverflow.com/questions/4238460

  •  26-09-2019
  •  | 
  •  

Domanda

Dato un array di lunghezza N, e può contenere valori da varia da 1 a N ^ 2 (N quadrato) entrambi inclusi, i valori sono solidali. E 'possibile ordinare questo array in O (n)? Se possibile, come?

Modifica:. Questo non è un lavoro

È stato utile?

Soluzione

Valuta ogni intero a base di N, cioè ogni x può essere rappresentato come (x1, x2) con x = 1 + x1 + x2 * N. Ora è possibile ordinare due volte con counting sort, una volta in x1 e una volta in x2, con la conseguente array ordinato.

Altri suggerimenti

Sì, è possibile, utilizzando radix sort con N secchi e due passaggi. In sostanza, si trattano i numeri come avere 2 cifre in base N .

È possibile ordinare qualsiasi array di interi con un valore massimo ben definito nel tempo O(n) utilizzando un ordinamento digitale . Questo è probabilmente il caso per qualsiasi lista di interi che si incontrano. Per esempio se si stesse ordinamento di un elenco di numeri interi precisione arbitraria, non sarebbe vero. Ma tutti i tipi integrali del C sono ben definiti intervalli fissi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top