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

中国建设网招商入驻谷歌排名网站优化

中国建设网招商入驻,谷歌排名网站优化,dedecms做网站教程,上海松江建设工程开发有限公司网站文章目录 归并排序与快速排序的简单实现(C语言)一、归并排序实现核心思想关键特性C语言实现 二、快速排序实现核心思想关键特性C语言实现 三、算法对比分析 四、总结 归并排序与快速排序的简单实现(C语言) 一、归并排序实现 核心…

文章目录

    • 归并排序与快速排序的简单实现(C语言)
      • 一、归并排序实现
        • 核心思想
        • 关键特性
        • C语言实现
      • 二、快速排序实现
        • 核心思想
        • 关键特性
        • C语言实现
      • 三、算法对比分析
    • 四、总结

归并排序与快速排序的简单实现(C语言)

一、归并排序实现

核心思想

采用分治策略的三步走:

  1. 分解:递归将数组二分至单个元素
  2. 解决:单个元素自然有序
  3. 合并:有序子数组合并为完整数组
关键特性
  • 稳定排序(相等元素顺序不变)
  • 时间复杂度:O(n log n)
  • 空间复杂度:O(n)
C语言实现
#include <stdio.h>
#include <stdlib.h>// 合并两个有序子数组
void merge(int arr[], int left, int mid, int right) {int n1 = mid - left + 1;int n2 = right - mid;// 创建临时数组int *L = (int*)malloc(n1 * sizeof(int));int *R = (int*)malloc(n2 * sizeof(int));// 拷贝数据到临时数组for (int i = 0; i < n1; i++)L[i] = arr[left + i];for (int j = 0; j < n2; j++)R[j] = arr[mid + 1 + j];// 合并临时数组int i = 0, j = 0, k = left;while (i < n1 && j < n2) {if (L[i] <= R[j]) {arr[k++] = L[i++];} else {arr[k++] = R[j++];}}// 拷贝剩余元素while (i < n1) arr[k++] = L[i++];while (j < n2) arr[k++] = R[j++];free(L);free(R);
}// 递归排序函数
void mergeSort(int arr[], int left, int right) {if (left < right) {int mid = left + (right - left)/2;mergeSort(arr, left, mid);mergeSort(arr, mid+1, right);merge(arr, left, mid, right);}
}

二、快速排序实现

核心思想

通过分区操作实现就地排序:

  1. 选基准:选择数组元素作为基准值(pivot)
  2. 分区:将数组分为小于基准和大于基准的两部分
  3. 递归:对子数组重复上述过程
关键特性
  • 平均时间复杂度O(n log n)
  • 最坏情况O(n²)(可通过优化避免)
  • 原地排序(空间复杂度O(log n)
  • 不稳定排序
C语言实现
// 交换两个元素
void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;
}// 分区函数(Lomuto方案)
int partition(int arr[], int low, int high) {int pivot = arr[high];  // 选择最后一个元素作为基准int i = low - 1;  // 小于基准的边界索引for (int j = low; j <= high - 1; j++) {if (arr[j] <= pivot) {i++;swap(&arr[i], &arr[j]);}}swap(&arr[i + 1], &arr[high]);return i + 1;
}// 递归排序函数
void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}// 优化版基准选择(三数取中法)
int medianOfThree(int arr[], int low, int high) {int mid = low + (high - low)/2;if (arr[low] > arr[mid]) swap(&arr[low], &arr[mid]);if (arr[low] > arr[high]) swap(&arr[low], &arr[high]);if (arr[mid] > arr[high]) swap(&arr[mid], &arr[high]);return mid;
}

三、算法对比分析

特性归并排序快速排序
时间复杂度稳定O(n log n)平均O(n log n),最差O(n²)
空间复杂度O(n)O(log n)
稳定性稳定不稳定
最佳场景链表/大数据集/需要稳定性内存排序/随机数据
缓存利用率较差(频繁创建临时数组)优秀(就地排序)
实现复杂度较高(需要合并操作)较低(分区策略简单)

四、总结

「稳链外,选归并;快省效,用快排」

  • 稳(稳定性) / 链(链表) / 外(外部数据) → 归并排序
  • 快(速度) / 省(内存) / 效(效率) → 快速排序
http://www.dtcms.com/wzjs/220144.html

相关文章:

  • 娱乐网站建设公司最近重大新闻
  • 网站上的流动图片怎么做的外贸接单平台哪个最好
  • 用备份的网站代码做网站步骤临沂百度联系方式
  • 网站备案注销申请书2022最新新闻
  • 冠县 网站建设提升关键词
  • 湖南小企业网站建设怎么做不收费的小说网站排名
  • 郫县建设局网站杭州网站seo公司
  • p站代理网址代理推广月入5万
  • 网站的百度百科怎么做线上营销技巧和营销方法
  • 学做网站论坛好吗定制网站开发
  • 域名购买网站有哪些问题公司网站怎么注册
  • 网络营销 网站建设百度邮箱登录入口
  • 广东营销网站建设服务公司深圳推广公司哪家好
  • 网站推广服务如何做seo优化
  • 新闻网站开发实例属于b2b的网站有哪些
  • 经营性网站如何备案怎样在百度上发布自己的信息
  • 网站销售怎么做网页设计与制作书籍
  • 网站后台补丁如何做北京网络seo推广公司
  • 网站蜘蛛记录器 v1.2抚顺网站建设
  • 柳州市建设工程质量安全监管理处网站百度认证平台官网
  • 网站建设 项目经验阿里巴巴关键词排名优化
  • asp.net做电商网站设计搜索引擎关键词的工具
  • 深圳手机网站建设多少钱中文网站排名
  • 自己做高仿衣服网站免费开店的电商平台
  • 天津住建委官网点击seo软件
  • 网站被挂黑后果1元涨1000粉
  • 潍坊网站建设多少钱营销软文广告
  • 百度推广网站谁做google chrome download
  • 国外优秀摄影作品网站查询友情链接
  • asp.net 网站 价格手机优化助手下载