当前位置: 首页 > wzjs >正文

个人备案门户网站网页设计留言板怎么做

个人备案门户网站,网页设计留言板怎么做,wordpress 永久链接,国家企业信息系统官方引言 快速排序(QuickSort)是一种分而治之的排序算法。它通过选择一个基准元素,将数组分为两部分,一部分的元素都比基准小,另一部分的元素都比基准大,然后对这两部分再进行快速排序,最终得到有序…

引言

快速排序(QuickSort)是一种分而治之的排序算法。它通过选择一个基准元素,将数组分为两部分,一部分的元素都比基准小,另一部分的元素都比基准大,然后对这两部分再进行快速排序,最终得到有序的数组。

算法思想

  1. 选择基准值(Pivot Selection):从数组中挑选一个元素作为基准值(Pivot)。基准值的选择方式多样,例如选择首个元素、末尾元素、中间元素或随机元素。

  2. 分区操作(Partitioning):重新排列数组,让所有小于基准值的元素位于基准值的左侧,所有大于基准值的元素位于基准值的右侧。这个过程被称作分区(Partition)。分区结束后,基准值就处于其最终排序后的位置。

  3. 递归排序(Recursive Sorting):分别对基准值左右两侧的子数组递归地应用上述两个步骤,直至子数组的大小为 0 或者 1,此时数组已完全有序。

算法分析

时间复杂度

  • 最优情况:当每次选择的基准元素正好将数组分成两等分时,快速排序的时间复杂度是O(nlogn)

  • 最坏情况:当每次选择的基准元素是最大或最小元素时,快速排序的时间复杂度是O(n^2)。

  • 平均情况:在平均情况下,快速排序的时间复杂度也是O(nlogn)

空间复杂度

快速排序的空间复杂度是O(logn),因为在递归调用中需要使用栈来存储中间结果。这意味着

在排序过程中,最多需要O(logn)的额外空间来保存递归调用的栈帧。

优化方案

  1. 选择合适的基准:选择合适的基准元素可以提高算法的性能。

  2. 三数取中;通过选择中间元素作为基准,可以避免最坏情况的出现。

  3. 分区的改进:可以使用双指针或其他方法来改进分区的过程,提高算法的效率。

  4. 小数组使用插入排序:对于小数组,可以直接使用插入排序,避免不必要的递归。

Java实现

/*** 交换数组中两个指定位置的元素* @param nums 待操作的数组* @param i    第一个元素的索引* @param j    第二个元素的索引*/
public void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;
}/*** 快速排序的分区函数,选择一个基准值并将数组分为两部分* 左边部分元素都小于等于基准值,右边部分元素都大于等于基准值* @param nums 待分区的数组* @param l    左边界索引* @param r    右边界索引* @return 基准值最终所在的索引位置*/
public int partition(int nums[], int l, int r) {// 随机选择一个索引作为基准值的位置,减少最坏情况的发生概率Random random = new Random();int index = l + random.nextInt(r - l + 1);// 将基准值交换到数组的左边界位置swap(nums, l, index);int i = l;          // 左指针,从左边界开始int j = r;          // 右指针,从右边界开始int x = nums[i];    // 基准值,此时位于左边界位置// 双指针扫描,将数组分为两部分while (i < j) {// 从右向左找第一个小于等于基准值的元素while (i < j && nums[j] > x) {j--;}// 将找到的元素交换到左边if (i < j) {swap(nums, i, j);i++;  // 左指针右移一位}// 从左向右找第一个大于等于基准值的元素while (i < j && nums[i] < x) {i++;}// 将找到的元素交换到右边if (i < j) {swap(nums, i, j);j--;  // 右指针左移一位}}// 返回基准值最终所在的位置return i;
}/*** 快速排序主函数,递归地对数组进行排序* @param nums 待排序的数组* @param l    左边界索引* @param r    右边界索引*/
public void quickSort(int nums[], int l, int r) {// 递归终止条件:当左边界大于右边界时,区间内没有元素或只有一个元素,已经有序if (l >= r) {return;}// 分区并获取基准值的位置int pivot = partition(nums, l, r);// 递归排序基准值左边的子数组quickSort(nums, l, pivot - 1);// 递归排序基准值右边的子数组quickSort(nums, pivot + 1, r);
}

http://www.dtcms.com/wzjs/812448.html

相关文章:

  • 磁力狗在线seo整站优化服务
  • 论坛网站免费建设模板vitality 中文原创wordpress主题
  • 360网站seo手机优化软件宁波seo排名优化价格
  • 开发公司网站一汽大众网站谁做的
  • 做网站背景图片要多大博物馆网站建设依据
  • 网站开发和企业级开发有什么区别注册软件开发公司需要什么条件
  • 网站地图模板下载株洲网站设计公司
  • 安徽建设新工程信息网站移动端网站开发公司
  • 做职业规划的网站网站开发报价单模板
  • 济南易搜的网站建设网页百度网盘
  • 做网站如何放入图像未成年做网站
  • 服装网站建设策划书淘宝运营视频教程全集
  • 网站开发补充合同范本自已建网站
  • 域名拦截检测网站企业解决方案是什么意思啊
  • 建html5网站ps怎么排版规划设计网站
  • 公司网站别人做的怎么签合同wordpress 查询系统
  • 推广网站建设语句吴川手机网站建设公司
  • 网站建设技术支持 会天下微信会员卡小程序
  • 网站开发多少工资wordpress字体库
  • 可信网站查询官网wordpress centos
  • 宾爵手表价格官方网站wordpress模板 美容
  • 一个人做商城网站在手机上怎么赚钱
  • 洛阳做多屏合一网站房屋设计软件免费版
  • 飞狐小说网站建设免费个人网站建设大全
  • 网络公司网站建太原模板网站建站
  • 如何免费注册网站中企动力算大厂吗
  • 外贸网站建设网站会qt怎么做网站
  • 网站后台登录系统是怎么做的现在流行做网站吗
  • 移动网站建设cnfg网店怎么运营
  • 智能魔方网站广东seo价格是多少钱