简单选择排序和堆排序
2012-08-28 20:33
176 查看
#include "stdafx.h" #include <iostream> using namespace std; #define MAXSIZE 20 typedef struct { int r[MAXSIZE + 1]; int length; }SqList; typedef SqList HeapType; //***********************************选择排序*************************************begin //查找最小值 int SelectMinKey(const SqList& L, int start) { int minValue = L.r[start]; int index = start; for (int i = start; i <= L.length; i++) { if (minValue > L.r[i]) { minValue = L.r[i]; index = i; } } return index; } //简单选择排序 void SelectSort(SqList &L) { for (int i = 1; i <= L.length; i++) { int j = SelectMinKey(L, i); if (i != j) { int tmp = L.r[i]; L.r[i] = L.r[j]; L.r[j] = tmp; } } } void SqlistPrint(SqList &L) { for (int i = 1; i <= L.length; i++) { cout<<L.r[i]<<" "; } cout<<endl; } //***********************************选择排序*************************************end //***********************************堆排序*************************************begin //堆调整 void HeadAdjust(HeapType &H,int s,int m) { int rc = H.r[s]; for (int j = 2 * s; j <= m; j *= 2) { if (j < m && H.r[j] < H.r[j + 1]) { ++j; } if (rc > H.r[j]) { break; } H.r[s] = H.r[j]; s = j; } H.r[s] = rc; } //堆排序 void HeadSort(HeapType &H) { for (int i = H.length / 2; i > 0; --i) { HeadAdjust(H, i, H.length); } for (int i = H.length; i > 1; --i) { int tmp = H.r[1]; H.r[1] = H.r[i]; H.r[i] = tmp; HeadAdjust(H, 1, i - 1); } } void HeadPrint(HeapType &H) { for (int i = 1; i <= H.length; i++) { cout<<H.r[i]<<" "; } cout<<endl; } //***********************************堆排序*************************************end int _tmain(int argc, _TCHAR* argv[]) { int arr[8] = {49, 38, 65, 97, 76, 13, 27, 49}; SqList L; HeapType H; L.length = H.length = sizeof(arr)/sizeof(arr[0]); for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) { L.r[i + 1] = arr[i]; H.r[i + 1] = arr[i]; } cout<<"*************************简单排序**************************"<<endl; cout<<"before: "; SqlistPrint(L); SelectSort(L); cout<<"after: "; SqlistPrint(L); cout<<endl<<"**************************堆排序***************************"<<endl; cout<<"before: "; HeadPrint(H); HeadSort(H); cout<<"after: "; HeadPrint(H); return 0; }
运行界面如下:
相关文章推荐
- 排序总结JS版(冒泡排序、简单选择排序、快速插入排序、希尔排序、堆排序、快速排序)
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 排序算法总结(简单选择排序、堆排序)(python实现)
- 选择排序(简单选择排序 and 堆排序)
- java实现排序算法之选择排序(简单选择排序和堆排序)
- 随机生成30个数,试比较直接插入排序、简单选择排序、冒泡排序、快速排序、堆排序和希尔排序的时空性能和稳定性。
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 算法导论 第6章 堆排序(简单选择排序、堆排序)
- 排序算法(1):简单选择排序和堆排序
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
- 初级版、正宗版、升级版冒泡排序;简单选择排序;直接插入排序;希尔排序;堆排序;递归法 、非递归法归并排序;快速排序; 快速排序优化算法
- 漫谈经典排序算法:一、从简单选择排序到堆排序的深度解析
- 简单选择排序与堆排序的比较
- 名称:选择排序---简单选择排序和堆排序
- 排序算法系列-堆排序-快速排序-基数排序-简单选择排序-归并排序
- 简单选择排序与堆排序的比较