9种常用排序算法总结(超详细)

您所在的位置:网站首页 比较次数与初始序列无关 9种常用排序算法总结(超详细)

9种常用排序算法总结(超详细)

2024-07-11 04:12| 来源: 网络整理| 查看: 265

在这里插入图片描述 以int型数据为例,且0号下标数组用来做为交换辅助空间,数据从1号下标开始存储

一、插入排序

基本思想:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到全部待排序记录全部插入为止。

直接插入排序

排序过程:

1、将待排序数组arr[1…n]看作两个集合,arr[1]为有序集合中元素,arr[2…n]为无序集合中元素,a[0]用来临时存放当前待排序记录

2、外层循环每次从无序集合中选择一个待插入元素(n-1次),每次使用顺序查找法,内层循环查找arr[i]在有序集合中的位置(将有序集合中大于待插入元素的记录后移一位)

//直接插入排序 void Insert_Sort(int *arr,int n){ int j = 0; for(int i = 2; i = arr[0]) high--; arr[low] = arr[high]; while((low < high) && arr[low] 1; i--){ arr[0] = arr[1]; arr[1] = arr[i]; arr[i] = arr[0]; heapify(arr,1,i-1); } }

时间复杂度:

​ 堆排序平均性能接近于最坏性能,时间复杂度为O(nlog2 n)

空间复杂度:

​ 仅用arr[0]作为交换辅助空间,空间复杂度为O(1)

算法特点:

​ 1、不稳定排序

​ 2、只能用于顺序结构,不能用于链式结构

​ 3、初始建堆所需要的比较次数比较多,记录较少时不宜采用,堆排序在最坏情况下的时间复杂度为O(nlog2 n),相对于快速排序最坏情况下的O(n^2)而言是个优点,当记录较多时较为高效。

四、归并排序

基本思想:假设初始序列含有n个记录,则可看成时n个有序的子序列,每个子序列的长度为1,然后两两并归,得到n/2个长度为2或1的有序子序列;如此重复,直至得到一个长度为n的有序序列为止。

//合并相邻位置上的有序表 void Merge(int arr1[],int arr2[],int low,int mid,int high){ int i = low, j = mid+1, k = low; while(i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3