- 博客(7)
- 资源 (2)
- 收藏
- 关注
原创 快速排序
像合并排序一样,快速排序也是基于分治模式。int partition(int array_data[], int start_index, int end_index) { int data = array_data[end_index]; int i = start_index; for(int j = start_index; j { if(array_data[j] { if(i != j)
2010-06-28 10:47:00 472
原创 堆排序
老实讲,这么多年,在工作中,从来没有用过堆排序,也没有借鉴过堆排序思想。主要原因是对堆排序早已经忘得一干二净。堆排序中,首先需要理解这里所说的堆,也就是定义。不是任意一堆数任意堆起来就是堆,而是这一堆数必须满足:n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ n) 满足性质1的称为小根堆,满足性质2的称为大根堆。可以将堆看做是完全二叉树。堆排序的第一步是建立
2010-06-22 15:28:00 503
原创 冒泡排序
冒泡排序是一种比较简单直观的排序方法。代码如下:void bubble_sort(int array_data[], int array_length) { for(int i = 0; i for(int j = array_length - 1; j>i; j--) { if(array_data[j] { int data = array_data[j];
2010-06-10 15:11:00 483
原创 合并排序
合并排序的主要功能是将两个已经排好序的数组合并成一个有序的大数组。合并的算法思想为:每次去两个数组中最小的(或者最大的)加入到新数组中。合并排序算法的C++代码:void merge_sort(int array_data[], int array_start_index, int array_end_index) { if(p { int q = (p + r) / 2; merge_sort(arrayData, p, q);
2010-06-09 15:40:00 455
原创 插入排序
写了几十年的程序,大多数都是有关逻辑与事务方面的,涉及算法的比较少,因此算法方面感到很是生疏了。如果继续写逻辑事务型程序,可能自己随时会厌倦的,并且能力也很难再提高。所以决定再学一次算法,以后尽量写一些更加关键的代码,尽量减少简单代码的重复编写。《算法导论》是一本不错的书,涉及的算法比较全面。这两天学习了插入排序算法。插入排序算法的实质用形式化的语言描述就是:将数组的第N+1个A[N]元素插入到A[0]到A[N-1]之间,其中A[0]到A[N]已经是有序的。从1到M(M为数组的长度)重复以上插入过程,就可以
2010-06-08 15:40:00 500
原创 OpenMP编程学习笔记九
OpenMP的Execution Model主要是几个线程通过同时运行,从而完成一个任务。与单核上的多线程并发执行是不同的,因为并发执行实际上是线程在不同的时间段占有CPU。而OpenMP的线程,是在各自的CPU上执行,不存在各个线程在同一个CPU上的调度。虽然有多个CPU,但是内存空间是共享的。并发线程间经常有临界变量,所以就不难理解OpenMP线程之间共享变量了。例如一个迭代求和,共享变量就是sum变量。并发线程中的每个线程都有私有的线程空间,同样,OpenMP线程也有自己的线程私有空间。Flush D
2010-06-03 11:29:00 789
原创 OpenMP编程学习笔记八
现在对OpenMP有了一定的感官认识。今天,又看了一下OpenMP的Execution Model,对Execution Model 有了更深入的认识。我的工作站是4核的,如果不运行OpenMP程序,只会有一个核运行程序,在Windows Task Manager中CPU的使用百分比应该会增加25%左右。测试代码:void OneCPU(){ long i = 0; while(1) { i++; }}运行后,发现CPU使用情况果然增加了25%左右。测试代码:void
2010-06-01 16:30:00 730
C++语言引入了并发机制,可以很容易的编写并发多线程程序了。
2010-06-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人