建立网站 英语怎么说,陕西住房建设厅官方网站,wordpress博客站点统计代码,专业设计vi目录
一、直接选择排序
1.基本思想
2.直接选择排序的特性总结 3.代码实现#xff1a;
二、堆排序
1. 概念#xff1a; 2.图像实现#xff1a;
3.代码实现#xff1a; 一、直接选择排序
1.基本思想 每一次从待排序的数据元素中选出最小#xff08;或最大#xff09…目录
一、直接选择排序
1.基本思想
2.直接选择排序的特性总结 3.代码实现
二、堆排序
1. 概念 2.图像实现
3.代码实现 一、直接选择排序
1.基本思想 每一次从待排序的数据元素中选出最小或最大的一个元素存放在序列的起始位置直到全部待排序的数据元素排完 。 2.直接选择排序的特性总结 1. 直接选择排序思考非常好理解但是效率不是很好。实际中很少使用 2. 时间复杂度 O(N^2) 3. 空间复杂度 O(1) 4. 稳定性不稳定 3.代码实现
void SelectSort(int* a, int n)
{int begin 0, end n - 1;while (begin end){int maxi begin, mini begin;for (int i begin; i end; i){if (a[i] a[maxi]){maxi i;}if (a[i] a[mini]){mini i;}}Swap(a[begin], a[mini]);// 如果maxi和begin重叠修正一下即可if (begin maxi){maxi mini;}Swap(a[end], a[maxi]);begin;--end;}
}
二、堆排序
1. 概念 堆排序(Heapsort)是指利用堆积树堆这种数据结构所设计的一种排序算法它是选择排序的一种。它是 通过堆来进行选择数据。需要注意的是排升序要建大堆排降序建小堆。 2.图像实现
逻辑如下图借鉴网图 3.代码实现 要注意堆排序需要先创建对应的堆利用向下调整的方法得到 void AdjustDown(int* a, int n, int parent)
{int child parent * 2 1;while (child n){// 找出小的那个孩子if (child 1 n a[child 1] a[child]){child;}if (a[child] a[parent]){Swap(a[child], a[parent]);parent child;child parent * 2 1;}else{break;}}
}// 排升序
void HeapSort(int* a, int n)
{// 建大堆for (int i (n - 1 - 1) / 2; i 0; --i){AdjustDown(a, n, i);}int end n - 1;while (end 0){Swap(a[0], a[end]);AdjustDown(a, end, 0);--end;}
}