专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅
可以运用分而治之方法来解决排序问题,该问题是将n个元素排成非递减顺序。分而治之方法通常用以下的步骤来进行排序算法:若n为1,算法终止;否则,将这一元素集合分割成两个或更多个子集合,对每一个子集合分别排序,然后将排好序的子集合归并为一个集合。假设仅将n个元素的集合分成两个子集合。现在需要确定如何进行子集合的划分。一种可能性就是把前面n-1个元素放到第一个子集中(称为A),最后一个元素放到第二个子集里(称为B)。按照这种方式对A递归地进行排序。由于B仅含一个元素,所以它已经排序完毕,在A排完序后,只需要用程序2-10中的函数insert将A和B合并起来。把这种 [阅读全文] [PDF]
分而治之方法还可以用于实现另一种完全不同的排序方法,这种排序法称为快速排序(quicksort)。在这种方法中,n个元素被分成三段(组):左段left,右段right和中段middle。中段仅包含一个元素。左段中各元素都小于等于中段元素,右段中各元素都大于等于中段元素。因此left和right中的元素可以独立排序,并且不必对left和right的排序结果进行合并。middle中的元素被称为支点(pivot)。图14-9中给出了快速排序的伪代码。//使用快速排序方法对a[0:n-1]排序从a[0:n-1]中选择一个元素作为middle,该元素为支点把余下的元 [阅读全文] [PDF]
对于给定的n个元素的数组a[0:n-1],要求从中找出第k小的元素。当a[0:n-1]被排序时,该元素就是a[k-1]。假设n=8,每个元素有两个域key和ID,其中key是一个整数,ID是一个字符。假设这8个元素为[(12,a),(4,b),(5,c),(4,d),(5,e),(10,f),(2,g),(20,h)],排序后得到数组[(2,g),(4,d),(4,b),(5,c),(5,e),(10,f),(12,a),(20,h)]。如果k=1,返回ID为g的元素;如果k=8,返回ID为h的元素;如果k=6,返回是ID为f的元素;如果k=2,返回ID为 [阅读全文] [PDF]
下面都是一些C语言中的基本的常用的排序算法,刚学习C语言的朋友可以看看。 /*对下列的数进行排序*/#defineN8 /*342,23586478554299*/ /**********冒泡排序************************/ voidBubbleSort(intR[],intn) { inti,j,temp; for(i=0;i<n-1;i++) for(j=n-2;j>=i;j--) if(R[j]>R[j+1]) { temp=R[j]; R[j]=R[j+1]; R[j+1]=temp; } } /**** [阅读全文] [PDF]
1 共4条 分1页