《大话数据结构》读书笔记——9.9快速排序

 1 #include "stdafx.h"
 2 #include "stdlib.h"
 3
 4 int Partition(int *arr,int _low,int _high);
 5 void QSort(int *arr,int low,int high);
 6 void QuickSort(int *arr,int low,int high);
 7 void Swap_a(int *arr,int i,int j);
 8 int _tmain(int argc, _TCHAR* argv[])
 9 {
10     int arr[10] = {1,2,0,9,3,5,4,6,8,7};
11     QuickSort(arr,0,9);
12
13     for(int i=0;i<10;++i)
14     {
15         printf("%d\t",arr[i]);
16     }
17     system("pause");
18     return 0;
19 }
20
21 int Partition(int *arr,int low,int high)
22 {
23     int pivotkey;
24     pivotkey = *(arr+low);
25     while(low<high)
26     {
27         while(low<high && *(arr+high)>=pivotkey)
28             high--;
29         Swap_a(arr,low,high);
30         while(low<high && *(arr+low)<=pivotkey)
31             low++;
32         Swap_a(arr,low,high);
33
34     }
35     return low;
36 }
37
38 void QSort(int *arr,int low,int high)
39 {
40     int pivot;
41     if (low<high)
42     {
43         pivot = Partition(arr,low,high);
44         QSort(arr,low,pivot-1);
45         QSort(arr,pivot+1,high);
46     }
47 }
48 void QuickSort(int *arr,int low,int high)
49 {
50     QSort(arr,low,high);
51 }
52
53 void Swap_a(int *arr,int i,int j)
54 {
55     int tmp = *(arr+i);
56     *(arr+i) = *(arr+j);
57     *(arr+j) = tmp;
58 }
时间: 2024-10-05 09:44:01

《大话数据结构》读书笔记——9.9快速排序的相关文章

大话数据结构读书笔记

大话数据结构读书笔记 编程基础: 数据结构 算法 1 线性表 //顺序储存结构的结构代码: #define MAXSIZE 20//储存空间的起始分配量 typedef int ElemType;//ElemType类型根据实际类型而定,这里假设是int typedef struct{ ElemType data[MAXSIZE];//数组储存元素,最大值为MAXSIZE int length;/线性表当前长度: }SqList; //顺序存储结构需要三个属性: //1存储空间的起始位置:数组d

大话数据结构读书笔记系列(三)线性表

    转载请注明来源:http://blog.csdn.net/u010194538/article/details/51001353 第3章线性表 3.2 线性表的定义 线性表(List):零个或多个数据元素的有限序列. 元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继. 线性表强调是有限的. 在较复杂的线性表中,一个数据元素可以由若干个数据项组成. 3.4 线性表的顺序存储结构 线性表的顺序存储结构,指的是用一段地址连续的

大话数据结构读书笔记系列(六)树&lt;上篇&gt;

转载请注明出处:http://blog.csdn.net/u010194538/article/details/51212759 这章内容比较多,分为上和下2篇: 第6章树 6.2 树的定义 之前我们一直在谈的是一对一的线性结构,可现实中,还有很多一对多的情况需要处理,所以我们需要研究这种一对多的数据结构--"树". 树(Tree)是n(n≥0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点:(2)当n>1时,其余结点可分为

大话设计模式读书笔记2——策略模式

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类直接的耦合. UML 图: 根据<大话设计模式>——第二章 商场促销这个案例代码来简单的记录一下策略模式的使用方式: /// <summary> /// 现金收费抽象类 /// </summary> public abstract class CashSuper { /// <summary> ///

大话设计模式读书笔记1——简单工厂模式

最近几日,重温了一下<大话设计模式>这本书,当时读的仓促,有很多没有注意的地方,现在仔细翻看起来,发现这值得细细品味的一本书!! 好东西就要记下来!!! 第一章笔记:从一个简单的计算器程序来看简单工厂模式. 变化的地方就要封装,用一个单独的类来做创造实例的过程这就是工厂. UML图: /// <summary> /// 运算类 /// </summary> public class Operation { public double Number1 { get; set

大话设计模式读书笔记2——单例模式

单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 我们来看一下单例模式下的饿汉模式代码: /// <summary> /// 饿汉模式 /// </summary> public class Singleton { //私有的构造器 private Singleton() {

大话设计模式读书笔记--设计模式总结

前言 大话设计模式看了两遍,之前看过一遍,理解的不深刻, 这次用了一个月多点的时间再次温习,利用下班后的时间回来学习,把学习心得记录下来,加深了对面向对象的理解 之前是看到一个需求搞清楚业务流程之后立刻就去做了,很少从设计层面的角度考虑,现在在开发程序时,开始有了设计的思想,也有了达到可维护,可复用,可扩展目的具体的实现方法 每当看到经过优化代码的效果时,就想起一句话:精彩的代码是如何想出来的,比看到精彩的代码更加令人兴奋 下面是用自己的话进行的总结,以便加深记忆和理解 创建型 抽象工厂 定义:

大话设计模式读书笔记--23.访问者模式

定义 访问者模式定义: 表示一个作用于某对象结构中的各元素的操作,它使你在不改变各元素的类的前提下,定义作用于这些元素的新操作 把数据结构, 和作用于数据结构上的操作,分离 模式结构 代码实现 场景: 男人和女人谈恋爱,男人的状态和女人的状态 代码实现:点击下载 特点和使用场景 优点:很容易增加新的操作 缺点: 使增加新的数据结构变得困难 使用场景: 数据结构相对稳定的系统

数据结构学习笔记06排序 (快速排序、表排序)

1.快速排序 不稳定 分而治之 找主元pivot,小于主元划分为一个子集,大于主元的划分为一个子集 然后进行递归 最好情况:每次主元正好中分,T(N) = O( NlogN ) 选主元 的方法有很多,这里用 取头.中.尾的中位数. 直接选A[0]为pivot,时间复杂度T ( N ) = O( N ) + T ( N–1 ) = O( N ) + O ( N–1 ) + T( N–2 ) = = O( N ) + O ( N–1 ) + …+ O( 1 ) = O( N^2 ) 随机取pivot