09 2020 档案
摘要:快速排序使用了分治思想。 分解:数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每一个元素都小于等于A[q],而A[q]也小于等于A[q+1..r]中的每个元素。其中,计算下标q也是划分过程的一部分。 解决:通过递归调用快速排序,对子
阅读全文
摘要:堆 (二叉)堆是一个数组,可被看成一个近似的完全二叉树,树上的每一个结点对应数组中的一个元素,除了最底层外,该树是完全充满的,而且是从左向右填充。 树的根结点为A[1],给定一个结点的下标i,则父结点、左孩子、右孩子结点下标为: Parent(i) return i/2 Left(i) return
阅读全文
摘要:分解:分解待排序的n个元素序列成各具 n/2 个元素的两个子序列。 解决:使用归并排序递归地排序两个子序列。 合并:合并两个排序的子序列以产生已排序的答案。 当待排序的序列长度为1时,递归“开始回升”,此时长度为1的每个子序列都已排好序,然后将已排好序的子序列合并。 const int INF=0x
阅读全文
摘要:相邻元素比较大小,交换位置。每一轮排序结束,非有序区中最大(最小)元素确定。 for(int i=1; i<=n-1; i++) { for(int j=1; j<=n-i-1; j++) { if(a[j] > a[j+1]) { int tmp=a[j]; a[j]=a[j+1]; a[j+1]
阅读全文
摘要:每一轮排序选择最小(最大)的元素放置有序区的末尾,直至所有元素排序完毕。 #include<iostream> using namespace std; int main() { int n,a[20]; cin>>n; for(int i=1; i<=n; i++) cin>>a[i]; for(
阅读全文
摘要:从第二个元素开始对有序区元素进行比较,如果有序区元素比当前元素大(小),则有序区元素右移,直至出现比该元素小(大)的元素,停止右移,并用该元素填补空位。 #include<iostream> using namespace std; int main() { int a[20],n; cin>>n;
阅读全文
浙公网安备 33010602011771号