2. 当一个数组为无序并且重复元素不多时候,也适合快速排序。为什么提出重复元素这个点呢?因为如果重复元素过多,本来重复元素是无需排序的,但是快速排序还是要划分为更多的子数组来比较,这个时候也许插入排序更适合。
c#武器版本
List<int> data = new List<int>();
for (int i = 0; i < 11; i++)
{ data.Add(new Random(Guid.NewGuid().GetHashCode()).Next(1, 100)); } //打印原始数组值 Console.WriteLine($"原始数据: {string.Join(",", data)}"); quickSort(data, 0, data.Count - 1); //打印排序后的数组 Console.WriteLine($"排序数据: {string.Join(",", data)}"); Console.Read();}
public static void quickSort(List <int> source, int left, int right)
{
int pivot = 0;
if (left < right)
{ pivot = partition(source, left, right); quickSort(source, left, pivot - 1); quickSort(source, pivot + 1, right); } } //对一个数组/列表按照第一个元素 分组排序,返回排序之后key所在的位置索引 private static int partition(List<int> source, int left, int right){
int key = source[left];
while (left < right)
{ //从右边筛选 大于选取的值的不动,小于key的交换位置 while (left < right && source[right] >= key) { right--;}
source[left] = source[right];
while (left < right && source[left] <= key)
{ left++;}
source[right] = source[left];
}
source[left] = key;
return left;
} 2 golang 武器版package main