堆排序是一种常见的复杂度为log复杂度的算法,具体实现如下:

void adjust_element(vector<int>& data, int i)
{
    if (2 * i + 1 >= data.size())
        return ;
    int index = 2 * i + 1;
    int min = data[index];
    if (2 * i + 2 < data.size() && data[2 * i + 2] < min)
    {
        min = data[2 * i + 2];
        index = 2 * i + 2;
    }
    if (data[i] > min)
    {
        int x = data[i];
        data[i] = min;
        data[index] = x;
        adjust_element(data, index);
    }
}
void heap_sort(vector<int>& data)
{
    for (int i = data.size() / 2 - 1; i >= 0; --i)
        adjust_element(data, i);
    for (int i = data.size() - 1; i >= 0; --i)
    {
        cout << data[0] << ",";
        data[0] = data[i];
        data.resize(data.size() - 1);
        adjust_element(data, 0);
    }
}

  

时间: 2024-11-02 23:29:50

堆排序是一种常见的复杂度为log复杂度的算法,具体实现如下:的相关文章

java几种常见的排序算法总结

[java] view plain copy /*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:"); for(int i=0;i<20;i++){ num[i]=(int)(Math.random()*100)

推荐系统的几种常见模型概述

某个选修课的论文,这里贴过来,之所以贴过来,是因为我认为自己写的确实非常有意义,网上对这个东西确实没有很系统的中文介绍,我自己也是看了许多论文自己也动手做了很多很多实践才领悟的. 这个只是概论,以后有时间再加上具体的模型.算法. ----------------------------------------------------------------------------- 总的来说,推荐系统的目标可以分为预测评分和物品推荐两种,目前对前者的研究也更多,因为前者更适合建复杂的模型,所以这

[转]6种常见的数据加载模式设计

原文链接:http://elya.cc/2014/03/31/loading/ 设计师在进行APP设计的设计时,往往会更加专注于界面长什么样,界面和界面之间怎么跳转,给予用户什么样的操作反馈,却偏偏特别容易忽略掉一个比较重要的环节,就是APP数据加载中的设计,所以会导致我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以轻松自在的享受等待,对加载后的

几种常见排序算法

几种常见排序算法 几种常见排序算法 写在前面 基础介绍 初级排序算法 selection sort选择排序 insertion sort插入排序 ShellSort希尔排序 shuffing不是排序算法 merge sort归并排序 Abstract in-place merge原地归并的抽象方法 Top-down mergesort自顶向下的归并排序 Bottom-up mergesort自底向上的归并排序 quicksort 三向切分的快速排序 Heapsort堆排序 总结和比较 命题 本文

6种常见的数据加载模式设计

设计师在进行APP设计的设计时,往往会更加专注于界面长什么样,界面和界面之间怎么跳转,给予用户什么样的操作反馈,却偏偏特别容易忽略掉一个比较重要的环节,就是APP数据加载中的设计,所以会导致我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以轻松自在的享受等待,对加载后的内容有明确的预期呢? 今天这篇文章,会介绍6种常见的加载模式设计,和3种减少等待

selenium自动化实施中对windows弹出框的几种常见处理方案

一.概述 在使用自动化框架selenium实施中,经常会遇到windows弹出框的出现,刚入门的web自动化测试小伙伴不要慌哦! 二.几种常见的处理windows弹出框的方案 2.1 Selenium 处理安全对话框 (windows security dialog)用autoit 来代替 2.1.1 安装autoit-v3-setup.exe 2.1.2 将AutoitX3.dll和jcob.1.18-M2-x86.dll放到C:\windows\System32路径下:如果是64位系统,需把

几种常见 容器 比较和分析

几种常见 容器 比较和分析 hashmap, map, vector, list ...hash&n list支持快速的插入和删除,但是查找费时; vector支持快速的查找,但是插入费时. map查找的时间复杂度是对数的,这几乎是最快的,hash也是对数的. 如果我自己写,我也会用二叉检索树,它在大部分情况下可以保证对数复杂度,最坏情况是常数复杂度,而std::map在任何情况下都可以保证对数复杂度,原因是它保证存诸结构是完全二叉检索树,但这会在存诸上牺牲一些时间. STL 中的 map 内部

几种常见的排序算法

1.插入类排序 在一个已经有序的序列中,插入一个新的记录.有直接插入排序.折半插入排序.希尔排序. 插入类排序 直接插入排序 1 void InsertSort(int R[], int n) 2 { 3 int i, j; 4 int temp; 5 for (i = 1; i < n; ++i) 6 { 7 temp = R[i]; 8 j = i - 1; 9 while (j >= 0 && temp < R[j]) 10 { 11 R[j+1] = R[j];

下午闲来没事儿,把几种常见的排序都码了一遍

Source code /* 内部排序相关代码总结 */ #include<windows.h> #include<vector> #include<algorithm> #include<iostream> #include<fstream> #include<math.h> #include<time.h> #define N 10000 //待排序的数据规模 static unsigned int T = 17; u