您的位置:首页 > 游戏 > 游戏 > 算法设计与分析(快速排序

算法设计与分析(快速排序

2024/11/18 12:15:18 来源:https://blog.csdn.net/m0_72249799/article/details/142287500  浏览:    关键词:算法设计与分析(快速排序

目录

  • 快速排序算法实现
    • 快速排序实现
      • `Partition` 函数
      • `QuickSort` 函数
      • `main` 函数
    • 代码汇总
    • 代码解释
      • Partition 函数:
      • QuickSort 函数:
      • main 函数:
  • 小结:

快速排序算法实现

快速排序(QuickSort)是一种高效的排序算法,采用分治法策略。它的核心思想是通过一个称为“枢轴”(pivot)的元素将数组分成两个子数组,使得左子数组中的所有元素都小于枢轴,而右子数组中的所有元素都大于枢轴,然后递归地对这两个子数组进行排序。以下是快速排序的 C++ 实现及其详细解释。

快速排序实现

Partition 函数

Partition 函数的作用是将数组分区,并返回枢轴元素的位置。下面是 Partition 函数的实现:

int Partition(int a[], int low, int high){int pivot = a[low];        // 将第一个元素作为 pivotwhile (low < high){while (low < high && a[high] >= pivot) --high;a[low] = a[high];      // 将小于 pivot 的元素移到低端 // 这里不能为了下一步位移,因为会导致a[high] = a[low]被错误填充 while (low < high && a[low] <= pivot) ++low;a[high] = a[low];     // 将大于 pivot 的元素移到高端} a[low] = pivot;           // 将 pivot 放到最终的位置return low;
}

QuickSort 函数

QuickSort 函数是递归实现的排序函数,它在 Partition 函数的帮助下对数组进行排序:

void QuickSort(int a[], int low, int high){if (low < high){// 分治int pivotpos = Partition(a, low, high);QuickSort(a, low, pivotpos - 1);   // 左半段排序QuickSort(a, pivotpos + 1, high);  // 右半段排序}
}

main 函数

main 函数用于测试 QuickSort 算法:

int main() {int a[10] = {5, 3, 7, 8, 4, 2, 10, 9, 1, 6};QuickSort(a, 0, 9);// 输出排序后的数组for (int i = 0; i <= 9; i++){  cout << a[i] << ' '; }cout << endl;return 0;  
}

运行结果

当你运行上述代码时,它会对数组进行快速排序,并输出排序后的结果:

1 2 3 4 5 6 7 8 9 10 

代码汇总

#include<iostream> using namespace std;  int Partition(int a[], int low, int high){int pivot = a[low];        // 将第一个元素作为 pivotwhile (low < high){while (low < high && a[high] >= pivot) --high;a[low] = a[high];      // 将小于 pivot 的元素移到低端 // 这里不能为了下一步位移,因为会导致a[high] = a[low]被错误填充 while (low < high && a[low] <= pivot) ++low;a[high] = a[low];     // 将大于 pivot 的元素移到高端} a[low] = pivot;           // 将 pivot 放到最终的位置return low;
}void QuickSort(int a[], int low, int high){if (low < high){// 分治 int pivotpos = Partition(a, low, high);QuickSort(a, low, pivotpos - 1);	// 左半段排序 QuickSort(a, pivotpos + 1, high); 	// 右半段排序}
}int main() {int a[10] = {5, 3, 7, 8, 4, 2, 10, 9, 1, 6};QuickSort(a, 0, 9);// 输出排序后的数组 for (int i = 0; i <= 9; i++){  cout << a[i] << ' '; }cout << endl;return 0;  
}

代码解释

Partition 函数:

选择数组的第一个元素作为枢轴元素。

使用两个指针 low 和 high 从数组的两端向中间移动,寻找不满足条件的元素并交换。

最终将枢轴元素放置在正确的位置,并返回这个位置的索引。

QuickSort 函数:

递归地对分区后的左右子数组进行排序。

基于 Partition 函数返回的枢轴位置进行递归调用。

main 函数:

初始化一个待排序的数组,调用 QuickSort 函数进行排序。

输出排序后的结果。

小结:

关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||竞赛资料|| ||课程资料||
添加我的公众号即可:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com