这么简单的插入排序,都可以优化,还有什么是不可以优化的。最让我惊讶的是,当多次调用一个函数的时候,函数的调用开销是不可忽略的。正如测试结果所示:
#include<stdio.h> #define MAX 1000000 void swap( int *data, int i, int j) { int temp = data[i]; data[i] = data[j]; data[j] = temp; } //未经过优化的插入排序,简单直观 void InsertSort1( int *data, int n) { int i, j; for( i = 1; i< n; i++) for( j = i; data[j - 1] > data[j] && j > 0; j--) swap(data, j-1, j); } //第一级优化的插入排序,将swap调用移到函数内部 void InsertSort2( int *data, int n) { int i, j; int temp; for( i = 1; i< n; i++) for( j = i; data[j - 1] > data[j] && j > 0; j--) { temp = data[j - 1]; data[j-1] = data[j]; data[j] = temp; } } //第二级优化的插入排序,注意到每次交换data[j - 1] , data[j],中间有多余的操作 void InsertSort3( int *data, int n) { int i, j, temp; for( i = 1; i< n; i++) { temp = data[i]; for( j = i; data[j - 1] > data[j] && j > 0; j--) data[j ] = data[j - 1]; data[j] = temp; } } int main() { //设置种子,每次产生的随机数一样 srand(5); //用以测试程序运行时间 double BegTime, EndTime; int i = 0; //待排序的数组 int data[MAX]; const int denominator = MAX * 10; //初始化待排序数组 for( i = 0; i < MAX; i++) data[i] = rand() % denominator; BegTime = clock(); InsertSort1( data, MAX); EndTime = clock(); printf("time of InsertSort1 test is : %gms\n", (EndTime - BegTime) / 1000); //初始化待排序数组 for( i = 0; i < MAX; i++) data[i] = rand() % denominator; BegTime = clock(); InsertSort2( data, MAX); EndTime = clock(); printf("time of InsertSort2 test is : %gms\n", (EndTime - BegTime) / 1000); //初始化待排序数组 for( i = 0; i < MAX; i++) data[i] = rand() % denominator; BegTime = clock(); InsertSort3( data, MAX); EndTime = clock(); printf("time of InsertSort3 test is : %gms\n", (EndTime - BegTime) / 1000); return 0; } 结果:
time of InsertSort1 test is : 20470ms time of InsertSort2 test is : 13720ms time of InsertSort3 test is : 8300ms
您还没有登录,请您登录后再发表评论
### 《编程珠玑》读书笔记关键知识点梳理 #### 一、引言 - **书籍定位**:《编程珠玑》是一本计算机科学领域的经典著作,由计算机科学大师Jon Bentley撰写,书中探讨了计算机科学的核心问题——如何正确选择和高效...
"编程珠玑总结笔记" 本资源笔记总结了编程珠玑中的一些重要知识点,包括优化程序、埃氏筛法和位图法等。 1. 打印出小于 10000 的素数 优化程序是编程珠玑中的一大主题,如何优化程序来提高效率是一个非常重要的...
《编程珠玑》是一本经典的计算机科学与编程书籍,作者是Jon Bentley。这本书以其独特的视角深入探讨了程序设计的艺术和技巧,旨在提升程序员的问题解决能力,优化算法,并提高代码效率。书中涵盖了一系列实用的编程...
《编程珠玑》是计算机科学领域的一本经典之作,由Jon Bentley 编著,它以其深入浅出的方式探讨了程序设计的问题和解决方案,尤其在数据结构、算法优化以及问题解决策略方面有着独到的见解。这本书的源代码是作者为了...
《编程珠玑 第2版(修订版)》是一本深受程序员喜爱的经典著作,它不仅提供了丰富的编程实践经验,还深入探讨了程序设计的艺术与智慧。这本书的修订版更是在原版基础上进行了更新和完善,旨在帮助程序员提升编程技能,...
根据提供的标题“编程珠玑(第二版)答案”和描述“编程珠玑(第二版)答案”,我们可以推测出这是关于《编程珠玑》这本书的相关解答资料。《编程珠玑》是一本经典的计算机科学书籍,作者为Jon Bentley。本书旨在...
输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数关联。 输出:按升序排列的输入整数列表。 约束:最多有(大约)1MB的...
《编程珠玑(续)》是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容组成一个有机的整体,...
《编程珠玑》和其续篇是两部深受程序员喜爱的经典著作,主要涵盖了程序设计、算法分析和数据结构等核心编程领域。这两本书以其深入浅出的讲解方式和丰富的实例,帮助读者提升编程技巧和解决问题的能力。 在《编程...
在《编程珠玑》中,作者首先介绍了算法设计和分析的基础知识,例如,排序和搜索。排序算法,如冒泡排序、插入排序和快速排序,是程序员入门的必修课,而搜索算法的讲解则强调了在数据集中快速定位信息的能力。本书...
《编程珠玑》是计算机科学领域的一本经典之作,由Jon Bentley著,主要探讨了程序设计问题的解决方法和算法优化。这本书的核心理念是通过实际的编程问题来传授如何高效地设计和分析算法,旨在提升程序员的问题解决...
Jon Bentley编著的《编程珠玑(续)》是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容...
2. **算法设计与分析**:《编程珠玑》强调了算法的重要性,不仅介绍了常见的排序和搜索算法,还讨论了如何在实际应用中选择和改进算法,以提高程序的运行效率。 3. **数据结构的应用**:书中详细讲解了各种数据结构...
算法经典书籍编程珠玑第2版,这本书除了讲算法,更是讲述解决问题的思想。
2.3 拓扑排序 17 2.4 原理 20 2.5 习题 21 2.6 深入阅读 22 第3章 程序员的忏悔 23 3.1 二分搜索 24 3.2 选择算法 26 3.3 子程序库 28 3.4 原理 30 3.5 习题 31 第4章 自描述数据 33 4.1 名字—值对 33 4.2 记录来历...
编程珠玑续、编程珠玑续本、编程珠玑续本、编程珠玑续本
2. 算法:源代码中包含排序算法(如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序)、查找算法(如顺序查找、二分查找、哈希查找)以及图算法(如深度优先搜索、广度优先搜索)。这些算法是解决问题的...
1. **排序与搜索算法**:《编程珠玑》详细讲解了各种排序算法,如插入排序、选择排序、快速排序、归并排序以及堆排序,以及它们的性能分析。同时,书中也涉及到了查找算法,如二分查找和哈希表的应用,这些都是面试...
《编程珠玑》是由Jon Bentley所著的一本计算机程序设计的经典著作,它在计算机科学领域内具有非常高的声誉。这本书深入探讨了计算机程序设计中的诸多方面,尤其强调了程序设计过程中洞察力和创造力的重要性。 Jon ...
相关推荐
### 《编程珠玑》读书笔记关键知识点梳理 #### 一、引言 - **书籍定位**:《编程珠玑》是一本计算机科学领域的经典著作,由计算机科学大师Jon Bentley撰写,书中探讨了计算机科学的核心问题——如何正确选择和高效...
"编程珠玑总结笔记" 本资源笔记总结了编程珠玑中的一些重要知识点,包括优化程序、埃氏筛法和位图法等。 1. 打印出小于 10000 的素数 优化程序是编程珠玑中的一大主题,如何优化程序来提高效率是一个非常重要的...
《编程珠玑》是一本经典的计算机科学与编程书籍,作者是Jon Bentley。这本书以其独特的视角深入探讨了程序设计的艺术和技巧,旨在提升程序员的问题解决能力,优化算法,并提高代码效率。书中涵盖了一系列实用的编程...
《编程珠玑》是计算机科学领域的一本经典之作,由Jon Bentley 编著,它以其深入浅出的方式探讨了程序设计的问题和解决方案,尤其在数据结构、算法优化以及问题解决策略方面有着独到的见解。这本书的源代码是作者为了...
《编程珠玑 第2版(修订版)》是一本深受程序员喜爱的经典著作,它不仅提供了丰富的编程实践经验,还深入探讨了程序设计的艺术与智慧。这本书的修订版更是在原版基础上进行了更新和完善,旨在帮助程序员提升编程技能,...
根据提供的标题“编程珠玑(第二版)答案”和描述“编程珠玑(第二版)答案”,我们可以推测出这是关于《编程珠玑》这本书的相关解答资料。《编程珠玑》是一本经典的计算机科学书籍,作者为Jon Bentley。本书旨在...
输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10^7,。如果在输入文件中有任何整数重复出现就是致命错误。没有其他数据与该整数关联。 输出:按升序排列的输入整数列表。 约束:最多有(大约)1MB的...
《编程珠玑(续)》是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容组成一个有机的整体,...
《编程珠玑》和其续篇是两部深受程序员喜爱的经典著作,主要涵盖了程序设计、算法分析和数据结构等核心编程领域。这两本书以其深入浅出的讲解方式和丰富的实例,帮助读者提升编程技巧和解决问题的能力。 在《编程...
在《编程珠玑》中,作者首先介绍了算法设计和分析的基础知识,例如,排序和搜索。排序算法,如冒泡排序、插入排序和快速排序,是程序员入门的必修课,而搜索算法的讲解则强调了在数据集中快速定位信息的能力。本书...
《编程珠玑》是计算机科学领域的一本经典之作,由Jon Bentley著,主要探讨了程序设计问题的解决方法和算法优化。这本书的核心理念是通过实际的编程问题来传授如何高效地设计和分析算法,旨在提升程序员的问题解决...
Jon Bentley编著的《编程珠玑(续)》是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容...
2. **算法设计与分析**:《编程珠玑》强调了算法的重要性,不仅介绍了常见的排序和搜索算法,还讨论了如何在实际应用中选择和改进算法,以提高程序的运行效率。 3. **数据结构的应用**:书中详细讲解了各种数据结构...
算法经典书籍编程珠玑第2版,这本书除了讲算法,更是讲述解决问题的思想。
2.3 拓扑排序 17 2.4 原理 20 2.5 习题 21 2.6 深入阅读 22 第3章 程序员的忏悔 23 3.1 二分搜索 24 3.2 选择算法 26 3.3 子程序库 28 3.4 原理 30 3.5 习题 31 第4章 自描述数据 33 4.1 名字—值对 33 4.2 记录来历...
编程珠玑续、编程珠玑续本、编程珠玑续本、编程珠玑续本
2. 算法:源代码中包含排序算法(如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序)、查找算法(如顺序查找、二分查找、哈希查找)以及图算法(如深度优先搜索、广度优先搜索)。这些算法是解决问题的...
1. **排序与搜索算法**:《编程珠玑》详细讲解了各种排序算法,如插入排序、选择排序、快速排序、归并排序以及堆排序,以及它们的性能分析。同时,书中也涉及到了查找算法,如二分查找和哈希表的应用,这些都是面试...
《编程珠玑》是由Jon Bentley所著的一本计算机程序设计的经典著作,它在计算机科学领域内具有非常高的声誉。这本书深入探讨了计算机程序设计中的诸多方面,尤其强调了程序设计过程中洞察力和创造力的重要性。 Jon ...