第七章节 排序

我们先假设排序工作是在内存中完成的,也就是说数据量小于几百万,这称为内部排序。最后再考虑大量数据时的排序,也就是外部排序。

对内部排序的研究将得出结论:

  • 存在几种容易 的算法 以O(N2)完成排序,如插入排序。
  • shell排序很简单,以o(N2)(这里是小o)完成排序,在实践中很有效果。
  • 有一些复杂的以O(NlogN)完成排序。
  • 任何通用的排序算法均要Ω(NlogN)次比较。

一、插入排序 

由N-1次排序组成,利用了这样的一个事实:已经位置0到 p-1上的元素已经处理排序的状态。在第p次比较时,我们将位置p上的元素向左移动,直到它在前p+1个元素中找到正确 的位置。位置p上元素保存于

tmp,而前面 的更大的元素向右移动 一个位置。与二叉堆实现时用了相同的技巧。

时间: 2024-11-08 15:24:12

第七章节 排序的相关文章

模板化的七种排序算法,适用于T* vector<T>以及list<T>

最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板纯属于偷懒,更方便于测试代码的有效性,等代码写完也懒得去改了.下面开始介绍这段代码,有什么不对的地方欢迎前来指正. 一共写了七种排序,插入排序InsertSort.堆排序HeapSort.快速排序QuickSort.合并排序MergeSort,计数排序CountingSort,基数排序RadixSo

七种排序算法的实现和总结

最近把七种排序算法集中在一起写了一遍. 注释里有比较详细的说明. 1 /*排序算法大集合**/ 2 #include <stdio.h> 3 #include <string.h> 4 #include <stdlib.h> 5 6 //------------------快速排序------------------// 7 /* 8 核心: 9 如果你知道多少人该站你前面,多少人站你后面,你一定知道你该站哪个位置. 10 算法: 11 1.选取分界数,参考这个分界数,

[数据结构(二)]七种排序算法的C++简单实现

一.冒泡排序(Bubble Sort) 基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止. //冒泡排序 void BubbleSort(int *p, int length) { for (int i = 0; i < length-1; i++) { for (int j =length-1; j>=i;j--) { if (p[j-1] > p[j]) { swap(p[j-1], p[j]); } } } } 排序前的顺序为:9 1 5 8 3 7 4

MySQL使用笔记(七)排序和限制数据记录查询

By francis_hao    Dec 17,2016 排序数据记录查询 排序是指将筛选出符合条件的数据进行有序排放,有升序(ASC(默认))方式和降序(DESC)方式. mysql> select field1 field2-- from table_name [where 条件] order by fieldm1 [asc|desc],fieldm2 asc|desc,--; 这里的第二个排序字段,会在第一个排序字段相同的情况下进行排序.若第一个排序字段没有相同项,则第二个排序字段无作用

算法分析-前七章排序算法全实现

var A = [6, 0, 2, 0, 1, 3, 4, 6, 1, 3, 2]; Array.prototype.swap = function (i, j) { var temp = this[j]; this[j] = this[i]; this[i] = temp;}; Array.prototype.getMaxVal = function () { //可以用任意我们学过的排序方法写,我们学过冒泡,选择,归并,快排,堆排序. //当然这样我们只要取出最大值即可,不需要全部排序,但是

python自学笔记(七)排序与多级排序

一.sorted内置方法 a = [1,2,3,4] 从大到小(翻转) a = sorted(a,reverse = True) #生成新对象,不会原地修改,需要重新赋值 print a -->[5,4,3,2,1] 二.list sort 方法 a.sort(reverse = True) #原地修改,不需要重新赋值 a = ["323","43233","2342"] a.sort(key = int) #整型排序 print a--&

面试题2:自己实现七个排序算法

冒泡排序: template<typename Dtype> void bubbleSort(Dtype arr[], int len) { if (len < 2) return; bool isSorted; for (int i = 0; i < len - 1; i++) { isSorted = true; for (int j = 0; j < len - 1; j++) { if (arr[j] > arr[j + 1]) { isSorted = fal

Netty in Action (十七) 第七章节 EventLoop和线程模型

本章节包括: 1)线程模型总览 2)Event Loop概念和具体实现 3)任务调度 4)实现细节 简单地陈述一下,对于一个操作系统,编程语言,框架,或者应用来说,线程模型对其都是至关重要的一部分,在什么时间如何创建一个线程都会对你的代码执行有很重要的影响,所以对于开发人员而言,懂得在各种线程模型里面权衡利弊就是一个很重要的事情,是直接使用线程模型本身还是通过一些框架或者语言提供的线程框架对于开发者而言都是需要选择的 在这个章节,我们将会详细地讲解Netty的线程模型,这个模型是很强大的,且易于

七种排序算法

  方法 时间复杂度 空间复杂度 Stable 冒泡排序(Bubble Sort) O(n) — O(n^2) O(1) yes 选择排序(Selection Sort) O(n^2) — O(n^2) O(1) no 插入排序(Insertion Sort) O(n) — O(n^2) O(1) yes 希尔排序(Shell Sort) O(n) — O(n log^2 n) O(1) no 快速排序(Quick Sort) O(n log n) — O(n log n) — O(n^2) O