随笔分类 - 算法
摘要:合并排序:把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。效率:⊙(nlogn)伪代码: 1 Mergesort(A[0..n-1]) 2 //递归调用mergesort来对数组A[0..n-1]排序 3 //输入:一个可排序数组A[0..n-1] 4 //输出:非降序排列的数组A[0..n-1] 5 if n>1 6 copy A[0..[n/2]-1] to B[0..[n/2]-1] 7 copy A[[n/2]..n-1] to C[0..[n/2]-1] 8 Mergesort(B[0..[n/2]-1] 9 M...
阅读全文
摘要:冒泡排序:比较表中相邻元素,如果它们是逆序的话,就交换它们的位置。重复多次以后,最大元素就"沉到"了列表的最后一个位置。第二遍操作将第二大的元素沉下去。这样一直做,直到n-1遍以后,该列表就排好序了。效率:⊙(n^2)伪代码:1 BubbleSort(A[0..n-1])2 //该算法用冒泡排序对数组A[0..n-1]排序3 //输入:一个可排序数组A[0..n-1]4 //输出:升序排列的数组A[0..n-1]5 for i<- 0 to n-2 do6 for j<- 0 to n-2-i do7 if(A[j+1]<A[j]8 ...
阅读全文
摘要:选择排序:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。效率:⊙(n^2)伪代码:1 SelectionSort(A[0..n-1])2 //该算法用选择排序对给定的数组排序3 //输入:一个可排序数组A[0..n-1]4 //输出:升序排列的数组A[0..n-1]5 for i<-0 to n-2 do6 min<-i;7 for j<- i+1 to n-1 do8 if A[j]<A[min] min<- j9 swap A[i] a...
阅读全文