排序算法-之选择排序(直接选择排序,堆排序)
来源:互联网 发布:php环境变量怎么配置 编辑:程序博客网 时间:2024/05/17 10:56
排序算法-之选择排序(直接选择排序,堆排序)
一、排序算法分为:
1.插入排序(直接插入排序&希尔排序)
2.选择排序(直接选择排序&堆排序)
3.交换排序(冒泡排序&快速排序)
4.归并排序
二,选择排序----直接选择排序
1.算法代码
//选择排序//直接选择排序void SelectSort(int* a,size_t n){assert(a);size_t left = 0;//下标size_t right = n-1;while(left<right){size_t min = left;//下标size_t max = left;;for(size_t i=left;i<=right;++i){if(a[min] > a[i])min = i;if(a[max]<a[i])max = i;}swap(a[min],a[left]);//将最小的数放到左边//修正if(max == left)//?有好几种情况max = min;swap(a[max],a[right]);++left;--right;}}////测试代码void PrintArray(int* a,size_t n){for(size_t i=0;i<n;++i){cout<<a[i]<<" ";}cout<<endl;}void SelectSortTest(){int a[]={2,5,4,0,9,3,6,8,7,1};PrintArray(a,sizeof(a)/sizeof(a[0]));SelectSort(a,sizeof(a)/sizeof(a[0]));PrintArray(a,sizeof(a)/sizeof(a[0]));}
2.时间复杂度
最好情况:O(n^2)
最坏情况:O(n^2)
平均时间复杂度:O(n^2)
空间复杂度:O(1)
3.稳定性
选择排序是不稳定的(把最小值换到已排序的末尾导致的),每次都能确定一个元素所在的最终位置,比较次数与初始序列无关。
三.选择排序----堆排序
1.算法代码
//堆排序void AdjustDown(int* a,size_t root,size_t n){size_t parent = root;size_t 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,size_t n){assert(a);//????for(int i=(n-2)/2;i>=0;--i){AdjustDown(a,i,n);}size_t end=n-1;while(end>0){swap(a[0],a[end]);AdjustDown(a,0,--end);}}////测试代码void PrintArray(int* a,size_t n){for(size_t i=0;i<n;++i){cout<<a[i]<<" ";}cout<<endl;}void HeapSortTest(){ int a[]={2,5,4,0,9,3,6,8,7,1};PrintArray(a,sizeof(a)/sizeof(a[0]));HeapSort(a,sizeof(a)/sizeof(a[0]));PrintArray(a,sizeof(a)/sizeof(a[0]));}2.时间复杂度
最好情况:O(nlogn)
最坏情况:O(nlogn)
平均时间 复杂度:O(nlogn)
空间复杂度:(O(1))
3.稳定性
堆排序是不稳定的,因为利用的排序空间仍然是初始的序列,并未开辟新的空间,算法是不稳定的,与初始序列无关。
阅读全文
0 0
- 经典算法之选择排序(直接选择、堆排序)
- 算法分析-选择排序(直接选择排序 & 堆排序)
- 算法-排序-选择排序(直接选择和堆排序)
- 排序算法-之选择排序(直接选择排序,堆排序)
- 选择排序(直接选择、堆排序)
- 选择排序(直接选择、堆排序)
- 排序:选择排序(直接选择排序、堆排序)
- 【排序】选择排序(直接选择排序、堆排序)
- 排序算法-选择排序之堆排序
- 选择排序:直接选择排序 堆排序
- 选择排序:直接选择排序,堆排序
- 选择排序(直接选择排序,堆排序)
- 算法 排序算法之选择排序--直接选择排序和堆排序
- 2.选择排序(直接选择排序和堆排序)
- 选择排序 (直接选择排序 ,堆排序)
- 选择排序(直接选择排序、堆排序)
- 选择排序(直接、堆)
- java数据结构之插入排序(选择排序(直接选择排序、堆排序))
- TensorFlow
- nd the $PHP_AUTOCONF environment variable. Then, rerun this script.
- uiautomatorviewer出现Unable to connect to adb
- .NET 数据库存储过程执行快,程序调用存储过程执行慢
- Android中别具一格的动画效果
- 排序算法-之选择排序(直接选择排序,堆排序)
- 毫秒服务引擎msec
- [漏洞] CVE-2017-1000364/CVE-2017-1000365/CVE-2017-1000366
- nginx location语法规则 ReWrite 语法
- C++vector常见用法总结
- 解决Android Studio连接不上逍遥模拟器的问题
- MongoDB Remove函数的3个常见用法
- 机器学习面试知识点总结
- 一个实例让你彻底明白Activity的4种启动模式