【面试准备】排序算法之堆、

#include<stdio.h>

void Fix(int a[], int index);
int main(){

    int array[10] = { 1, 3, 6, 4, 19, 33, 10, 3, 8, 2 };

    Fix(array, 9);
    for (int i = 9; i >= 0; i--){

        int temp = array[i];
        array[i] = array[0];
        array[0] = temp;
        Fix(array, i-1);
    }

    for (int i = 0; i < 10; i++){

        printf("%d ", array[i]);
    }
}

void Fix(int a[], int index){

    for (int i = index; i >= 0; i--){

        int parent = (i - 1) / 2;
        if (parent >= 0){

            if (a[i] > a[parent]){

                int temp = a[i];
                a[i] = a[parent];
                a[parent] = temp;
            }
        }
    }
}

堆排序

http://www.cnblogs.com/mengdd/archive/2012/11/30/2796845.html

#include<stdio.h>

void Merge(int a[], int first, int end);
void Sort(int a[], int first, int mid, int end);

int temp[10];
int main(){

    int array[10] = { 1, 3, 6, 4, 19, 33, 10, 3, 8, 2 };

    Merge(array, 0, 9);

    for (int i = 0; i < 10; i++){

        printf("%d ", array[i]);
    }

    getchar();
}

void Merge(int a[], int first, int end){

    int mid = (first + end) / 2;
    if (mid != first)
        Merge(a, first, mid);
    if (mid != end)
        Merge(a, mid + 1, end);

    Sort(a, first, mid, end);
}

void Sort(int a[], int first, int mid, int end){

    int i = first, j = mid + 1, k = 0;
    while (i <= mid || j <= end){

        if (a[i] > a[j]){

            if (j > end){

                temp[k++] = a[i++];
            }
            else{

                temp[k++] = a[j++];
            }
        }
        else{

            if (i > mid){

                temp[k] = a[j++];
            }
            else{

                temp[k++] = a[i++];
            }
        }
    }

    for (int i = 0; i < k; i++){
        a[first + i] = temp[i];
    }
}

归并排序

http://www.cnblogs.com/Braveliu/archive/2013/01/14/2860456.html

http://baike.baidu.com/link?url=ppHPIR22RnpSQO0AHPAfTFHGdm5Hk7yaM_JM5L3o_nYK8nmBwWL0dDTxrzA4ZZhNJjVYHIBpKaq-FlmPmzypQa

时间: 2024-10-18 03:57:22

【面试准备】排序算法之堆、的相关文章

java 排序算法 折半 堆 希尔 快速 整理

试题1:折半查找 折半查找是在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现: 1)待查找数据值与中间元素值正好相等,则放回中间元素值的索引. 2)待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行1),直到找到相等的值. 3)待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,执行1),直到找到相等的值 4)如果最后找不到相等的值,则返回不存储数据的备用单位0. 给你的问题是,标准输入一升序排列有序整数表,使用折半查找方法

面试:排序算法实现

1 /* 2 * testmain.cpp 3 * 4 * Created on: 2017年7月16日 5 * Author: Administrator 6 */ 7 8 #include <utility> 9 #include <algorithm> 10 #include <cstring> 11 #include <vector> 12 #include <list> 13 #include <iostream> 14 1

面试题目集锦 -- 排序算法

      面试过程中.免不了会问一些比較基础的问题,而这些基础的问题肯定要说到排序上去.       我们知道.排序算法包括插入,选择,冒泡.高速,归并,堆排序等等,大多时候,我们在面试的时候,最常问的排序算法是堆,高速和归并排序,其它的几种相对简单,问的较少.那么,我们仅仅须要在面试前把它们都弄懂然后自己在纸上写出来就能够了.在写这些算法的时候,我查了非常多的资料,也看了非常多文章.毕竟排序算法非常经典.所以,在这上面花的时间还挺多的.只是,我发现有些排序算法的实现偏复杂.并且不好理解,于是

(2)Java数据结构--二叉树 -和排序算法实现

=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDecimal类Java API —— BigInteger类Java API —— Calendar类Java API —— DateFormat类Java API —— Date类Java API —— HashMap类 & LinkedHashMap类Java API —— JDK5新特性Java

视觉直观感受 7 种常用的排序算法

1. 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性. 步骤: 从数列中挑出一个元素,称为 "基准"(pivot), 重新排序数列,所有元

(转载)[直观学习排序算法] 视觉直观感受若干常用排序算法

1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性. 步骤: 从数列中挑出一个元素,称为 "基准"(pivot), 重新排序数列,所有元素

常见的排序算法

描述: 排序算法可谓数据结构模块中的重中之重,常见的哈希表,二叉树,搜索树/平衡树,位图等数据结构只是处理实际问题的抽象方法,实际在处理接受或生成的数据集时,排序算法显得尤其重要,排序算法家族很庞大,其中包括了冒泡排序,选择排序,插入排序,堆排序,快速排序,归并排序,基数排序,计数排序,希尔排序,箱排序,树型排序等众多算法,每种排序都有各自的特性,没有好坏之分,只有在特定的场景使用合适的排序算法才是上策,单纯的来比显得太过绝对,没有可比性.因为实际需求及各方面条件的限制使得排序算法的可选范围往往

【轻松学排序算法】眼睛直观感受几种常用排序算法(转)

1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性. 步骤: 从数列中挑出一个元素,称为 "基准"(pivot), 重新排序数列,所有元素

【数据结构】常见的7种比较排序算法1

● 直接插入排序(Insert Sort) 1.算法描述: 该算法是一种简单直观的是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上只需用到O(1)的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位为最新元素提供插入空间. 2.步骤: 1)从第一个元素开始,该元素可以认为已经被排序 2)取出下一个元素,在已经排序的元素序列中从后向前扫描 3)如果该元素(已排序)大于新元素,将该元素移到下一位置 4)重复步骤3,直到找到已