c#快速排序
昨天闭门造车,造出了二叉树的生成和遍历。今天继续造车,记得有次面试问我快速排序的算法。我当时想你们公司又不搞芯片设计啥的,干吗效率这么高?就做普通的一些管理软件,用现在的机器随便一个排序就够用了嘛!知道你们这叫啥?叫人才高消费!呵呵(葡萄酸)。: )当时只说了用递归和大体的思想,还真没实现过,今天经过一番造车,造出来了,不知道和传说中高人的快速算法有啥区别,也不清楚自己造的算不算快速排序呢。: )
using System;
namespace QuickSortTest
{
class QuickSort
{
public void Sort(int[] data, int low, int high) //传数组就不用ref了吧?: )
{
if (low >= high) return;
else if (low + 1 == high)
{
if (data[low] > data[high])
{
int t = data[low];
data[low] = data[high];
data[high] = t;
}
return;
}
int p = low;
int flag = data[p];
int i = low;
int j = high;
while (i < j) //从两头往中间走呗,大的放后面,小的放前面嘛!: )
{
while (j > i && data[j] >= flag) j--;
data[p] = data[j];
data[j] = flag;
p = j;
while (data[i] < flag) i++;
data[p] = data[i];
data[i] = flag;
p = i;
}
Sort(data, low, p -1); //传说中的"分治"思想,前面代码只是把大的放后面
Sort(data, p+1, high); //小的放前面,然后在用同样的道理分而治之呗: )
}
}
class Program
{
static void Main(string[] args)
{
const int count = 100;
int[] data = new int[count];
Random rnd = new Random();
for (int i = 0; i < count; i++)
{
data[i] = rnd.Next(100);
Console.Write("{0}\t", data[i]);
}
Console.WriteLine("--------------------------------------------------------------------------");
QuickSort qs = new QuickSort();
qs.Sort(data, 0, data.Length - 1);
for (int i = 0; i < count; i++)
Console.Write("{0}\t", data[i]);
Console.ReadLine();
}
}
}
namespace QuickSortTest
{
class QuickSort
{
public void Sort(int[] data, int low, int high) //传数组就不用ref了吧?: )
{
if (low >= high) return;
else if (low + 1 == high)
{
if (data[low] > data[high])
{
int t = data[low];
data[low] = data[high];
data[high] = t;
}
return;
}
int p = low;
int flag = data[p];
int i = low;
int j = high;
while (i < j) //从两头往中间走呗,大的放后面,小的放前面嘛!: )
{
while (j > i && data[j] >= flag) j--;
data[p] = data[j];
data[j] = flag;
p = j;
while (data[i] < flag) i++;
data[p] = data[i];
data[i] = flag;
p = i;
}
Sort(data, low, p -1); //传说中的"分治"思想,前面代码只是把大的放后面
Sort(data, p+1, high); //小的放前面,然后在用同样的道理分而治之呗: )
}
}
class Program
{
static void Main(string[] args)
{
const int count = 100;
int[] data = new int[count];
Random rnd = new Random();
for (int i = 0; i < count; i++)
{
data[i] = rnd.Next(100);
Console.Write("{0}\t", data[i]);
}
Console.WriteLine("--------------------------------------------------------------------------");
QuickSort qs = new QuickSort();
qs.Sort(data, 0, data.Length - 1);
for (int i = 0; i < count; i++)
Console.Write("{0}\t", data[i]);
Console.ReadLine();
}
}
}
浙公网安备 33010602011771号