快速排序,昨天上网找的算法说明,今天用c#给实现的,确实蛮快,嘎嘎
简单说明:输入第一个参数是要排序的数组,这里我写的是引用传递,用了ref修饰,其实这里是不是引用传递不是关键,第二个和第三个参数指定要排序的起始和终止点,当然一般都是全排序啦,就指向数组头和尾就行,注意num.Length这里别忘了减一,不然可就越界了,数组是从0开始的~
private void checkNumOredASC(ref int[] num,int left,int right)
{
int i = left;
int j = right;
int temp;
int middle;
middle = num[(right + left)/2];
while ((num[i]<middle) && (i<right))
{
i++;
}
while ((num[j]>middle) && (j>left))
{
j--;
}
if(i<=j)
{
temp = num[i];
num[i] = num[j];
num[j] = temp;
i++;
j--;
}
if(left<j)
{
checkNumOredASC(ref num,left,j);
}
if(right>i)
{
checkNumOredASC(ref num,i,right);
}
}
简单说明:输入第一个参数是要排序的数组,这里我写的是引用传递,用了ref修饰,其实这里是不是引用传递不是关键,第二个和第三个参数指定要排序的起始和终止点,当然一般都是全排序啦,就指向数组头和尾就行,注意num.Length这里别忘了减一,不然可就越界了,数组是从0开始的~
private void checkNumOredASC(ref int[] num,int left,int right)
{
int i = left;
int j = right;
int temp;
int middle;
middle = num[(right + left)/2];
while ((num[i]<middle) && (i<right))
{
i++;
}
while ((num[j]>middle) && (j>left))
{
j--;
}
if(i<=j)
{
temp = num[i];
num[i] = num[j];
num[j] = temp;
i++;
j--;
}
if(left<j)
{
checkNumOredASC(ref num,left,j);
}
if(right>i)
{
checkNumOredASC(ref num,i,right);
}
}