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

南京大型门户网站制作/成都seo论坛

南京大型门户网站制作,成都seo论坛,企业网站建设排名客服,企业微信app下载安装安装【从零开始学习计算机科学】算法分析(二)排序算法 与 分治法 排序算法插入排序冒泡排序快速排序希尔(Shell)排序选择排序堆排序归并排序计数排序基数排序桶排序分治法排序算法 这一部分主要介绍一些常用的基础排序算法,并从稳定性,时间、空间复杂度进行分析。 插入排序…

【从零开始学习计算机科学】算法分析(二)排序算法 与 分治法

  • 排序算法
    • 插入排序
    • 冒泡排序
    • 快速排序
    • 希尔(Shell)排序
    • 选择排序
    • 堆排序
    • 归并排序
    • 计数排序
    • 基数排序
    • 桶排序
  • 分治法

排序算法

这一部分主要介绍一些常用的基础排序算法,并从稳定性,时间、空间复杂度进行分析。

插入排序

插入排序将待排序的数据分成两个区域:有序区和无序区,每次将一个无序区中的数据按其大小插入到有序区中的适当位置,直到所有无序区中的数据都插入完成为止。

伪代码如下:

void insertsort(Elemtype a[], int n){int i, j;for(int i = 2; i<=n; i++){if(a[i] < a[i-1]){a[0] = a[i];for(int j = i-1; a[0] < a[j]; --j){a[j+1] = a[j];}a[j+1] = a[0];}}
}

分析:稳定性:稳定;时间复杂度:O( n 2 n^2 n2);空间复杂度:O(1)。

冒泡排序

冒泡排序最多进行n-1趟排序,每趟排序时,按相同的方向扫描,一旦发现两个相邻的元素不符合规则,则交换。

伪代码如下:

void bubblesort(Elemtype a[], int n){for(int i = 0; i<n-1; i++){for(int j = 0; j<n-1-i; j++){if(a[j] < a[j+1]){swap(a[j], a[j+1]);}}}
}

分析:稳定性:稳定;时间复杂度:O( n 2 n^2 n2);空间复杂度:O(1)。

改进方法:每趟排序时,记住最后一次发生交换的位置,则该位置之前的记录均已有序。

快速排序

在A[1, … \ldots ,n]中任取一个数据元素作为比较的基准(记为X),将数据区划分为左右两个部分:A[1, … \ldots ,i-1]和A[i+1, … \ldots ,n],且A[1, … \ldots ,i-1] ≤ \leq X ≤ \leq A[i+1, … \ldots ,n](1 ≤ \leq i ≤ \leq n),当A[1, … \ldots ,i-1]和A[i+1, … \ldots ,n]非空时,分别对它们进行上述的划分过程,直至所有数据元素均已排序为止。

伪代码如下:

int partition(Elemtype a[], int low, int high){Elemtype p = a[low];while(low < high){while(high>low && a[high]>=p) high--;a[low] = a[high];while(low<high && a[low]<=p) low++;a[high] = a[low];}a[low] = p;return low;
}void quicksort(Elemtype a[], int low, int high){if(low < high){int mid = partition(a, low, high);quicksort(a, low, mid-1);quicksort(a, mid+1, high);}
}

分析:稳定性:不稳定。

时间复杂度:每趟排序所需的比较次数为待排序区间的长度-1,排序趟数越多,占用时间越多。

最坏情况:每次划分选取的基准恰好都是当前序列中的最小(或最大)值,划分的结果A[low, … \ldots ,i-1]为空区间 或A[i+1, … \ldots ,high]是空区间,且非空区间长度达到最大值。这种情况下,必须进行n-1趟快速排序,第i次趟区间长度为n-i+1,总的比较次数达到最大值:n(n-1)/2 = O( n 2 n_2 n2)。

最好情况:每次划分所取的基准都是当前序列中的“中值”,划分后的两个新区间长度大致相等。共需lgn趟快速排序,总的关键字比较次数:O(n·lgn)。

平均情况:根据主定理可以得到,平均时间复杂度为O(n·lgn)。
基准的选择决定了算法性能。经常采用选取low和high之间一个随机位置作为基准的方式改善性能。

空间复杂度:快速排序在系统内部需要一个栈来实现递归,最坏情况下为O(n),最佳情况下为O(lg·n)。

希尔(Shell)排序

希尔排序任取一个小于n的整数 S 1 S_1 S1作为增量,把所有元素分成 S 1 S_1 S

http://www.whsansanxincailiao.cn/news/31955610.html

相关文章:

  • 网站管理 官网/百度收录规则
  • 网站没完成可以备案么/无锡百度推广开户
  • 公司企业邮箱大全/搜索引擎优化的五个方面
  • 北京建设信息咨询中心网站/定制网站开发
  • 商机互联做的网站和推广怎么样/seo资料
  • 响应式网站做mip/百度seo搜索营销新视角
  • 公司seo排名优化/优化营商环境指什么
  • 绵阳网站建设/品牌策划方案怎么做
  • wordpress本地怎么搬家/汕头seo
  • php网站后台管理模板/网络推广有哪些常见的推广方法
  • 六一儿童节网站制作/现在的网络推广怎么做
  • 上海网站建设宣传/企业推广是做什么的
  • 邢台信息港欢迎您/seo公司的选上海百首网络
  • 网站建设jiage/竞价排名采用什么计费方式
  • 上海网站开发工程师招聘网/西安网站seo厂家
  • 学网站建设工作室/百度云网盘搜索引擎
  • 杂志在线设计网站/百度seo优化规则
  • 培训网站建设方案书/自媒体平台大全
  • 国内外公司网站差异/外链是什么意思
  • 通州网站制作/百度竞价推广开户
  • 行业 网站 方案/1元购买域名
  • 啥是深圳网站建设/千锋教育可靠吗
  • 临海市网站建设/百度点击快速排名
  • 淘宝网页制作教程视频/农大南路网络营销推广优化
  • 事业单位网站建设方案/360免费做网站
  • 公司网站与推广/代发关键词排名包收录
  • 网站策划的具体内容是什么/企业网络营销方案设计
  • 如果做独立网站赚钱/谷歌账号注册
  • 淘宝做网站的靠谱吗/网店运营是做什么的
  • 诸城做网站的公司/农大南路网络营销推广优化