2012-02-11 2 views
0

Я использую выбор рода, но я хочу, лучшее решение для сортировки, чем это:Какой самый быстрый вид сортировки массива?

static void SelectionSort(int[] a) 
    { 
     int temp, pmin; 
     for (int i=0; i<a.Length-1; i++) 
     { 
      pmin=i; 
      for (int j=i+1; j<a.Length; j++) 
      if (a[j]<a[pmin]) 
       pmin=j; 
      temp = a[i]; 
      a[i] = a[pmin]; 
      a[pmin] = temp; 
     } 
    } 
+1

Is массив. Сортировать (а) недостаточно? (использует быструю сортировку) –

+0

Как насчет сортировки radix? – Mehrdad

+0

Возможный дубликат [C Советы по сортировке массива] (http://stackoverflow.com/questions/3893937/c-array-sorting-tips) –

ответ

3

Просто используйте:

Array.Sort(a); 

Что будет делать QuickSort.

2

Если посмотреть на wikipedia, есть хорошее сравнение различных алгоритмов сортировки, насколько их пространств и сложность времени. Многие из них составляют n lg n или n среднее время, которое должно удовлетворять вашим потребностям.

Кроме того, .NET поставляется с несколькими сортировочных алгоритмов, построенных в. В том числе и Array.Sort()List.Sort()

2

Array.Sort(a) использования или orderby в linq

1

Там нет абсолютного победителя в алгоритмов сортировки. Эффективность зависит от размера, содержания, состояния массива. You знать только то, что лучше для вас.

Ищите here для примера и измерения.

1

просто использовать встроенную функцию в Array: Array.Sort(a)

0

Чтобы иметь быстрый алгоритм сортировки, вы должны использовать heap sort .Это имеет самую низкую временную сложность по сравнению со всеми остальными алгоритма сортировки

A program to implement Heap Sort 

#include<stdio.h> 

void restoreHup(int*,int); 
void restoreHdown(int*,int,int); 

void main() 
{ 
    int a[20],n,i,j,k; 
    printf(" Enter the number of elements to sort : "); 
    scanf("%d",&n); 

    printf("Enter the elements : "); 
    for(i=1;i<=n;i++){ 
      scanf("%d",&a[i]); 
      restoreHup(a,i); 
    } 


    j=n; 
    for(i=1;i<=j;i++) 
    { 
      int temp; 
      temp=a[1]; 
      a[1]=a[n]; 
      a[n]=temp; 
      n--; 
      restoreHdown(a,1,n); 
    } 

    n=j; 

    printf("Here is it..."); 
    for(i=1;i<=n;i++) 
      printf("%4d",a[i]); 
    } 



    void restoreHup(int *a,int i) 
    { 
    int v=a[i]; 

    while((i>1)&&(a[i/2]<v)) 
    { 
      a[i]=a[i/2]; 
      i=i/2; 
    } 
    a[i]=v; 
    } 

    void restoreHdown(int *a,int i,int n) 
    { 
    int v=a[i]; 
    int j=i*2; 
    while(j<=n) 
    { 
      if((j<n)&&(a[j]<a[j+1])) 
        j++; 
      if(a[j]<a[j/2]) break; 

      a[j/2]=a[j]; 
      j=j*2; 
    } 
    a[j/2]=v; 
    }