选择排序和堆排序
来源:互联网 发布:小企业it整体解决方案 编辑:程序博客网 时间:2024/06/06 01:39
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法,选择排序是一种时间复杂度为O(N^2)的算法
void SelectSort(int*arr, int n){ int left = 0; int right = n; int i = left; while (left < right) { int min = left; int max = right - 1; for (i=left; i < right; ++i) { if (arr[i] < arr[min]) { min = i; } if (arr[i]>arr[max]) { max = i; } } swap(arr[left], arr[min]); if (max == left) { max = min; } swap(arr[--right], arr[max]); ++left; }}
堆排序
首先将堆建好之后,在让最后一个数和第一个数交换,交换之后,把之前最后一个数不在当作数组中的数,将第一个数到最后一个数的前一个数进行向下调整算法。直到调整到最后一个数变为第一个数的时候不再需要调整,堆排序的升序也已经排列好了。
void AdjustDown(int *arr, int root,int n){ int parent = root; int child = parent * 2 + 1; while (child<n) { if (child + 1 < n&&arr[child] < arr[child + 1]) { ++child; } if (arr[child] > arr[parent]) { swap(arr[child], arr[parent]); } parent = child; child = parent * 2 + 1; }}void HeapSort(int *arr, int n){ int *p = arr; for (int i = (n - 2) / 2; i >= 0; --i) { AdjustDown(arr, i,n); } int end = n - 1; while (end > 0) { swap(arr[0], arr[end]); AdjustDown(arr, 0, end); --end; }}
阅读全文
1 1
- 选择排序和堆排序
- 选择排序和堆排序
- 选择排序和堆排序
- 选择排序和堆排序
- 选择排序和堆排序
- 选择排序和堆排序
- 选择排序和堆排序
- 【选择排序】和【堆排序】
- 选择排序和堆排序
- 选择排序和堆排序
- 堆排序和选择排序的比较
- 简单选择排序和堆排序
- 选择排序和堆排序9.3.1
- 选择排序--堆排序
- 选择排序:堆排序
- 选择排序-堆排序
- 选择排序-【堆排序】
- 【选择排序】堆排序
- leetcode 140. Word Break II
- 关于学习认知的一点感想
- POJ 2524 Ubiquitous Religions 笔记
- 05 mysql中的函数
- MySql数据库常用DML | 黄乔国PHP
- 选择排序和堆排序
- *************************************************************************************
- 八大排序算法
- 【MyBatis学习07】动态sql
- hadoop上传文件错误org.apache.hadoop.ipc.RemoteException(java.io.IOException)
- 【笔记】Python算法教程(1)
- systen v消息队列(一)
- 进程程序替换------>exec 函数家族
- DCL、DDL、DML三种数据库语言的概述及区分方式