快速排序~~程序有点不理解~~
using System;using System.Collections.Generic;
using System.Text;
namespace QuickSort
{
class Program
{
public void Swap(ref int i,ref int j)
{
int temp;
temp = i;
i= j;
j = temp;
}
public int Partition(int[] l,int left, int right)
{
int i, j;
i = left-1;
j = right +1;
do
{
do i++; while (l[i] < l[left]);
do j--; while (l[j] > l[left]);
if(i<j) Swap(ref l[i],ref l[j]);
} while (i < j);
Swap(ref l[left],ref l[j]);
return j;
}
public void Quick(int[] l,int left, int right)
{
int j;
if (left <right)
{
j = Partition(l,left,right);
Quick(l,left, j - 1);
Quick(l,j + 1, right);
}
}
static void Main(string[] args)
{
Program p = new Program();
int[] array = new int[10] { 5, 7, 10, 2, 4, 3, 9, 8, 0, 6 };
p.Quick(array,0,array.Length-1);
for (int i = 0; i < 10; i++)
{
Console.Write(array[i]+" ");
}
Console.ReadLine();
}
}
}
函数Partition()里面i为什么不是left,而是left-1 ??? --------------------编程问答-------------------- --------------------编程问答-------------------- 因为后面的 do i++ 部分,因为第一次执行循环时会先+1的 --------------------编程问答-------------------- 是有点扰人~ --------------------编程问答-------------------- i = left-1;
j = right +1;
do
{
do i++; while (l[i] < l[left]); --------------------编程问答-------------------- 用这么绕么?static void QuickSort(int[] a, int l, int r)
{
int left = l;
int right = r;
int pivot = a[(l + r) / 2];
int temp;
while (l < r)
{
while (a[l] < pivot) { ++l; }
while (a[r] > pivot) { --r; }
if (l >= r) break;
temp = a[l];
a[l] = a[r];
a[r] = temp;
if (a[l] != pivot) { ++l; }
if (a[r] != pivot) { --r; }
}
if (left < r) { QuickSort(a, left, l - 1); }
if (l < right) { QuickSort(a, r + 1, right); }
}
static void Main(string[] args)
{
int[] aa ={ 74, 5, 78, 2, 46, 32, 10, 97, 34 };
QuickSort(aa, 0, 8);
for (int i = 0; i < aa.Length; i++)
{
Console.WriteLine(aa[i]);
}
Console.Read();
} --------------------编程问答-------------------- 帮顶,学习了· 标记 --------------------编程问答-------------------- 因为left已经走到right右边(下一位)去了。 --------------------编程问答-------------------- 第一轮的时候,不就应该是将下标为0的元素作为分割元素,然后从下标为1的元素向后找么,那么left被赋值为0,然后i=left时,i=0;进人下面的循环,i++不正好变为1么
补充:.NET技术 , C#