
排序问题
ojshilu
https://github.com/lucky521
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1202 排序
#include#includeusing namespace std;void sort(int a[],int n){ int i,j,tmp; for(i=1;i<n;i++) { tmp = a[i]; for(j=i-1;j>=0;j--) { if(tmp>a[j]) break; } for(int k=i;k>j+1;k--)原创 2013-07-13 22:13:56 · 1004 阅读 · 0 评论 -
通过交换相邻数来完成排序所需要的最少交换次数
对一个无序序列进行排序,要求一次只能交换相邻的两个数,那么最少需要交换多少次才可以完成排序呢?本问题假设序列所有数各不相同。概念介绍:1、逆序。一般认为从左向右序列的数字增大认为是正序的,那么从左到右序列的序列数字出现减小就认为是逆序的。一个“逆序”的数学定义是这样的,如果存在正整数 i, j 使得 1 ≤ i A[j],则 这个有序对称为 A 的一个逆序,又称作一个逆序对原创 2013-12-02 10:27:06 · 22290 阅读 · 0 评论 -
桶排序 Bucket sort
桶排序在操作上类似于基数排序。这是一种分治/划分的思想。先定义一个“桶”,把数据集合分成若干个小集合。然后桶内的排序就是用普通的排序方法,选一个最优的。划分的方法是需一个映射函数f(k),将所有数据分别映射到各自的桶中。基数排序的划分就是按照每个权值位的,桶排序也可以这样,但更好的情况是有一个能类似hash的函数,能做到更好的映射。原创 2013-10-21 10:30:22 · 1635 阅读 · 0 评论 -
堆排序 全面总结
堆排序:虽然用到类似二叉树的思想,但是仍是原地排序。堆分为大根堆和小根堆两种。堆顶元素一定是该序列最值。对于从小到大的排序,适合采用大根堆,每轮都将堆顶的最大值与堆末元素交换。堆排序的基本思想:由于大根堆的堆顶元素是最大值,因此我每次都可以找到当时的最大值,从而达到排序的目的。具体的,先把原始序列变成堆,然后把堆顶最大值调换到尾部作为已排好序的部分(堆外),此时堆变小且被破坏,原创 2013-10-21 10:39:35 · 1449 阅读 · 0 评论 -
归并排序 全面总结 Merge Sort
1,这里的归并排序指的就是2路归并排序,将一个序列不断分治,直到分成只有1个元素的序列,然后合并。2,算法的关键在Merge。Merge是将2个有序序列合并为一个有序序列。其中分治后的最小情况,即1个元素的序列就认为是有序序列。依次逐步Merge起来。#include #include #include void merge(int a[], int first, int原创 2013-07-16 19:53:50 · 1488 阅读 · 0 评论