排序思想:每次排序区间的第一个元素作为基准,把此区间内比基准大的元素放在基准右边,比基准小的元素放在基准左边。
性能分析:从空间复杂度方面,快速排序是递归的,每层递归调用时的指针和参数均要用栈来存放,递归调用次数与二叉树的深度一致。因此,在理想情况下,及每一趟排序都将记录序列均匀的分隔成长度接近的两个子序列,则需要栈空间为O(logn);在最坏情况下,即每趟排序之后,基准元素位置均偏向子序列的一...
分类:
其他好文 时间:
2014-06-17 21:55:05
阅读次数:
201
1. 在python中,对象就是为C中的结构体在堆上申请的一块内存。对象不能被静态初始化,也不能在栈空间生存。但内建的类型对象都是被静态初始化的。
2. 对象创建后大小不变。可变对象有一指针指向可变大小的内存区域。
3. 对象机制的基石:PyObject...
分类:
编程语言 时间:
2014-06-14 10:20:49
阅读次数:
309
议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小)分析:算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法;使用显示下推栈存储快速排序中的每一次划分结果
(将left和right都压入堆栈),并且首先处理划分序列较短的子序列(也就是在得...
分类:
其他好文 时间:
2014-06-03 08:23:29
阅读次数:
367
递归函数具有很好的可读性和可维护性,但是大部分情况下程序效率不如非递归函数,所以在程序设计中一般喜欢先用递归解决问题,在保证方法正确的前提下再转换为非递归函数以提高效率。函数调用时,需要在栈中分配新的帧,将返回地址,调用参数和局部变量入栈。所以递归调用越深,占用的栈空间越多。如果层数过深,肯定会导致...
分类:
其他好文 时间:
2014-05-29 23:14:47
阅读次数:
420
1.网络编程中设计并发服务器,使用多进程与多线程 ,请问有什么区别
1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
区别:两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,...
分类:
编程语言 时间:
2014-05-22 06:16:44
阅读次数:
386
进程 OS并发的一个任务CPU分时间片交替执行 宏观并行
微观串行线程:在一个进程中并发的一个顺序执行流程线程的组成:1.数据 堆空间共享 栈空间独立 2.CPU3.代码Thread 线程对象 继承Thread类型
覆盖run方法 直接创建Thread对象实现Runnable接口...
分类:
编程语言 时间:
2014-05-08 22:10:57
阅读次数:
357
递归调用子程序如果一个子程序直接调用他自己,这种调用称为字节递归调用,如果一个子程序间接调用自己,这种调用称为间接递归调用递归调用子程序必须采用寄存器或堆栈传递参数,递归的深度受到堆栈空间的限制下面的子程序递归调用实现求阶乘;子程序说明
FACT;功能,计算N!;入口参数:(AX) = n;出口参....
分类:
其他好文 时间:
2014-05-08 18:13:53
阅读次数:
253
---------------------------------------------栈,是一种数据结构,我觉得栈是抽象的,但是它同样也是实际的,因为它在内存中是连续的内存,只不过人们限制了它的使用:后进先出,学数据结构两年了,现在才理解,实在惭愧。pushax;I、sp=sp-2II、取出ax中的数据,放入当前栈..
分类:
其他好文 时间:
2014-05-08 02:39:38
阅读次数:
398
这两天较系统的看了下C++的基本用法,对比自己对Java理解,感觉就是C++特性远远多于Java,语法上兼容C,更加贴近系统和底层,对内存操作非常的灵活。如:
C++中类的对象可以开辟在栈空间中。Java类的对象都必须用new关键字开辟在堆中;
C++的基本数据类型也可以用new开辟在堆中。Java基本数据类型只能开辟在栈中,除非使用包装类包装成对象;
C++用new开辟的内存必须手动delete,否则内存泄露。Java则有著名的垃圾回收;
C++传参可以传值和传引用,也可以配合指针传对象地址,自己来决定。...
分类:
编程语言 时间:
2014-05-07 08:45:33
阅读次数:
353