排序算法(三)
来源:互联网 发布:mysqldump 指定数据库 编辑:程序博客网 时间:2024/06/07 03:16
选择排序首先就是找到数组中最小的那个元素,然后将其与数组中的第一个元素交换位置;接着在剩余的元素中找到最小的元素,将其与第二个元素交换位置。如此往复,直到将针整个数组排序。其实就是不断的在剩余数组中找最小的元素。所以它的运行时间和输入无关,它的移动也是最少的。
选择排序
时间复杂度O(n^2),空间复杂度O(1),不稳定!选择和冒泡的区别:选择是每次遍历未排序的数组,选出最小或最大的值,将其放在未排序的头或尾位置,而冒泡是每次遍历数组,两两比较相邻的值,并对未排序的进行交换,最终将当前的最大或最小的值放在未排序的头或尾位置。
void SelectionSort(int a[], int n){ for (int i = 0; i < n - 1; i++) // i为已排序序列的末尾 { int min = i; //将未排序的末尾的值赋给a[min] for (int j = i + 1; j < n; j++) // 未排序序列 { if (a[j] < a[min]) // 找出未排序序列中的最小值 { min = j; } } if (min != i) { int temp = a[min]; a[min] = a[i]; a[i] = temp; }}
堆排序
https://www.cnblogs.com/kkun/archive/2011/11/23/2260286.html
这里说的堆是指的一种数据结果,这个数据结果其实就是完全二叉树,对于完全二叉树,则除了叶子结点,别的结点都是由两个孩子的,分别是左孩子和右孩子,如果一个节点为i,则它的左孩子为2i+1,右孩子为2i+2。如果不理解可以看上面那个博客!它对整个过程作了详细的说明。
时间复杂度O(nlogn),空间复杂度 O(1),是不稳定的!
void Heapify(int a[],int i,int size){ //从a[i]向下进行堆调整int left_child = 2*i+1; //左孩子的索引int right_child = 2*i+2; //右孩子的索引int max = i; //先认为i为最大的值,然后与左右孩子比较,选出最大值if(left_child < size && a[left_child] > a[max])max = left_child;if(right_child < size && a[right_child] > a[max])max = right_child;if(max != i){int temp = a[i];a[i] = a[max];a[max] = temp;Heapify(a,max,size); //通过递归调用,调整堆,在该代码中,是建立最大堆}}int BuildHeap(int a[],int n){ //建堆int heap_size = n;for(int i = heap_size/2 - 1; i >= 0; i--) //从每一个非叶子结点开始往下调整Heapify(a,i,heap_size);return heap_size;}void HeapSort(int a[],int n){ int heap_size = BuildHeap(a,n); //建立一个最大堆while(heap_size > 1){ //堆元素大于1,说明还没有完成排序int temp = a[0]; //将堆定元素和最后一个元素进行交换,并且在堆中去掉最后一个元素a[0] = a[--heap_size];a[heap_size] = temp;Heapify(a,0,heap_size); //对新堆进行自顶而下的调整,形成最大堆}}
阅读全文
0 0
- 排序算法(三)
- 排序算法(三)
- 排序算法(三)
- 排序算法小记(三)
- 排序算法总结(三)
- 排序算法总结(三)
- 排序算法总结(三)
- 算法(三)合并排序
- 排序算法总结(三)
- 排序算法讲解(三)
- 排序算法总结(三)
- 算法之排序(三)
- (三)算法--排序算法选择排序和冒泡排序
- Java排序算法(三):堆排序
- 排序算法(三)之插入排序
- 排序算法(三):堆排序
- 排序算法(三) 冒泡排序
- Java排序算法(三):堆排序
- 常见OJ评判结果对照表,作为ACMer你懂得!
- 21.开源项目--git分支合并
- svn--3.创建启动仓库
- C#获取调用方信息-日志组件使用
- 自定义alert
- 排序算法(三)
- 标签语义化
- 2017年全国研究生数学建模自记
- Apache Mina(二)
- android项目简单介绍
- Tensorflow实战学习(三十八)【实现估值网络】
- 不能设想没有梦的人生——致2012届大学毕业生
- Java时间日期格式转换
- MySQL导入sql文件出错