什么';s是对数组进行排序最快的一种
本文关键字:一种 排序 数组 什么 | 更新日期: 2023-09-27 18:24:11
我使用选择排序,但我想要一个比这更好的排序解决方案:
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;
}
}
只需使用:
Array.Sort(a);
这将进行快速排序。
如果您查看维基百科,就其空间和时间复杂性而言,可以很好地比较不同的排序算法。许多是n lg n
或n
的平均时间,应该很适合您的需求。
此外,.NET还内置了几种排序算法。包括Array.Sort()和List.Sort()
在linq 中使用Array.Sort(a)
或orderby
排序算法没有绝对的赢家。效率取决于阵列的大小、内容和状态你只知道什么对你最好。
看看这里的例子和衡量标准。
只需使用Array
:Array.Sort(a)
中的内置函数
要获得最快的排序算法,您应该使用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;
}