1.快速排序主要思想
快速排序是一种常用的排序算法,其主要思想是选择一个基准值,将数组分割成两部分,左边的部分都比基准值小,右边的部分都比基准值大,然后对左右两部分分别进行递归排序,最终实现整个数组的排序。
快速排序的主要步骤:
-
1.选择基准值
- 从数组中选择一个基准值,通常是数组中的第一个元素、最后一个元素或者中间的元素。
-
2.分割
- 将数组中小于基准值的元素放在左边,大于基准值的元素放在右边,基准值处于最终排序位置的中间。
-
3.递归排序
-
4.合并
- 不需要合并步骤,因为在分割的过程中,子数组的顺序会得到维护。
2.C++示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
void SortTest::quickSort(int *p,const int start, const int end) {
if (start < end) {
int pivot = p[end];
int i = start - 1;
for (int j = start; j < end ; ++j) {
if (p[j] <= pivot) {
++i;
std::swap(p[i], p[j]);
}
}
std::swap(p[i + 1], p[end]);
int pivotIndex = i + 1;//分区并获取枢纽索引
quickSort(p, 0, pivotIndex - 1);//对枢纽左侧的子数组进行快速排序
quickSort(p, pivotIndex + 1, end);//对枢纽右侧的子数组进行快速排序
}
}
|
调用如下
1
2
3
4
5
6
7
8
9
10
11
|
void SortTest::test() {
const int KLenOfArray = 11;
int p[KLenOfArray] = { 10, 6, 12, 5, 1, 8, 11, 32, 1, 21, 3 };
int q[KLenOfArray];
memset(q, 0, sizeof(int) * KLenOfArray);
memcpy(q, p, sizeof(int) * KLenOfArray);
std::cout<<"quickSort快速排序后为"<<endl;
quickSort(q, 0, KLenOfArray - 1);
showArray(q, KLenOfArray);
}
|
3.效果
1
2
|
quickSort快速排序后为
arraylist infommation:1,1,3,5,6,8,10,11,12,21,32,
|
4.小结
此文看下C++代码的排版及风格,后面可能会添加C++方向的笔记,不喜勿喷。
文章作者
梵梵爸
上次更新
2024-05-18
许可协议
原创文章,如需转载请注明文章作者和出处。谢谢