使用算法在C ++中快速排序,示例
它是TonyHoare爵士于1959年发明的。
在快速排序中,我们将数组分为两部分,对于这两个部分的所有可能索引,一个部分的所有元素都小于或等于另一部分的元素,如果我们重复对这些行进行排序,则整个数组将被排序。这些被称为分而治之的方法。
快速排序的描述
从一个分区a中选择一个随机的枢轴元素pi,使其小于pi的元素集合,等于pi的元素集合以及大于pi的元素集合,最后,对该分区中的第一和第三集合进行递归排序。
算法:
quickSort(array<T>& a)
{
quickSort(a, 0, a.length);
quickSort(array<T> & a, int i, int n)
{
if (n <= 1)
return;
T pi = a[i + rand() % n];
int p = i - 1, j = i, q = i + n;
while (j < q) {
int comp = compare(a[j], pi);
if (comp < 0) {
a.swap(j++, ++p); //移到数组的开头
}
else if (comp > 0) {
a.swap(j, --q); //移到数组末尾
}
else {
j++; //保持在中间
}
}
}
}
// a[i..p]<pi, a[p+1..q-1]=pi, a[q..i+n-1]>pi
quickSort(a, i, p - i + 1);
quickSort(a, q, n - (q - i));考虑快速排序工作流程:
main(){intn;cout<<“输入元素数量:”;cin>>n;inta[n];cout<<“输入数组:”;for(inti=0;i<n;i++){cin>>a[i];}quicksort(a,0,n-1);cout<<“排序数组为:”;for(inti=0;i<n;i++){cout<<a[i]<<“”;}返回0;}
输出结果
RUN 1: //输入元素数量: 5 //输入数组: 10 20 5 15 10 //排序数组是: 5 10 10 15 20 RUN 2: //输入元素数量: 10 //输入数组: 40 30 20 50 60 70 80 90 10 11 //排序数组是: 10 11 20 30 40 50 60 70 80 90
热门推荐
10 钢琴人祝福语女生简短
11 岗位考试顺利祝福语简短
12 关于老师蛋糕祝福语简短
13 娘家妈妈新婚祝福语简短
14 生日留言简短祝福语大全
15 祝福语诗意文案简短
16 校长退休文案祝福语简短
17 宝子生日祝福语简短
18 寒露祝福语毕业寄语简短