浅谈数据结构排序算法C#快速排序
C#快速排序
快速排序的思想:
(以从大到小排序为例)在无序数组中首先选择一个基数(通常是第一个),设置两个变量i、j,i=0,j=数组长度。从j开始从后往前进行查找,找到第一个小于基数的值A[j],交换位置(A[j]赋给A[i]),然后i开始从前往后进行查找,找到第一个大于基数的值A[i],交换位置(A[i]赋给A[j])。
直到i=j结束一轮,这样一轮下来发现数组被划分为两半,小于基数的全在左侧,大于基数的全在右侧,保证了左侧的最大值小于右侧的最小值。
然后按照同样的思路对左侧和右侧分别在进行同样的排序方式,这样最终保证了数组从小到大有序排列。
具体代码实现:
#region 快速排序
void KuaiSuPaiXu(int[] array,int firstIndex,int lastIndex )
{
if (firstIndex<lastIndex)
{
int i = firstIndex;
int j = lastIndex;
int KeyElement = array[firstIndex];
while (i<j)
{
while (i<j&&(array[j]>=KeyElement))
{
j--;
}
if (i<j)
{
array[i++] = array[j];
}
while (i < j && (array[i] < KeyElement))
{
i++;
}
if (i < j)
{
array[j--] = array[i];
}
}
array[i] = KeyElement;
KuaiSuPaiXu(array, firstIndex, i - 1);
KuaiSuPaiXu(array, i + 1, lastIndex);
}
}
#endregion