面试常用算法
1. 求数组中和最大的子序列
2. 快速排序
基本思想在于把排序对象分割为两列子序列,而其中一个子序列的值都大雨另一子序列,并且进一步递归排序所有子序列
static void Run(int[] data, int low, int high)
{
//简单设定中间值,并以此为一趟快排的分割点
//注意这是一个简单的算法
//如果想对这个算法进行优化的话,可以采取随机的方法来获取分割点
int middle = data[(low + high) / 2];
int i = low;
int j = high;
// 直至分割出两个序列
do
{
// 扫描中值左边元素
while (data[i] < middle && i < high)
i++;
// 扫描中值右边元素
while (data[j] > middle && j > low)
j--;
//找到了一对可交换的值
if (i <= j)
{
//交换
int temp = data[i];
data[i] = data[j];
data[j] = temp;
i++;
j--;
}
} while (i <= j);
//递归对比分割点元素都小的那个序列进行快速排序
if (j > low)
Run(data, low, j);
//递归对比分割点元素都大的那个序列进行快速排序
if (i < high)
Run(data, i, high);
}
//建立测试数据
int[] data = new Int32[] { 1, 1, 4, 3, 6, 7, 4, 5, 0, 0 };
//进行快速排序
Run(data, 0, data.Length - 1);
//打印检查结果
Response.Write(string.Join(" , ",data));

浙公网安备 33010602011771号