Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
SuperSupeng committed Mar 10, 2021
1 parent 686b31d commit da57aed
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 2 deletions.
13 changes: 12 additions & 1 deletion go-implementation/Sorting-algorithm/sort-algo/Heap-sort.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ import "fmt"
* @Description:
**/

// 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。、
// 堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:
// 即子结点的键值或索引总是小于(或者大于)它的父节点。
//
//算法描述:
// 将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;
// 将堆顶元素R[1]与最后一个元素R[n]交换,
// 此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满足R[1,2…n-1]<=R[n];
// 由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,……Rn-1)调整为新堆,
// 然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2….Rn-2)和新的有序区(Rn-1,Rn)。
// 不断重复此过程直到有序区的元素个数为n-1,则整个排序过程完成。
func adjustHeap(a []int, pos int, lenght int) {
for {
// 计算孩子位置
Expand Down Expand Up @@ -60,4 +71,4 @@ func main() {
num := []int{98, 48, 777, 63, 57, 433, 23, 1112, 1}
HeapSort(num)
fmt.Println("heap sort over:", num)
}
}
10 changes: 9 additions & 1 deletion go-implementation/Sorting-algorithm/sort-algo/Merge-sort.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
package sort_algo


// 归并排序是建立在归并操作上的一种有效的排序算法。
// 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
// 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
// 若将两个有序表合并成一个有序表,称为2-路归并。
//
//算法描述:
// 把长度为n的输入序列分成两个长度为n/2的子序列;
// 对这两个子序列分别采用归并排序;
// 将两个排序好的子序列合并成一个最终的排序序列。
func MergeSort(arr []int, l int, r int) {
if l >= r {
return
Expand Down
12 changes: 12 additions & 0 deletions go-implementation/Sorting-algorithm/sort-algo/Quick-sort.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
package sort_algo

// 快速排序的基本思想:
// 通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,
// 则可分别对这两部分记录继续进行排序,以达到整个序列有序。
//
//算法描述:
// 快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)
// 具体算法描述如下:
// 从数列中挑出一个元素,称为 “基准”(pivot);
// 重新排序数列,所有元素比基准值小的摆放在基准前面,
// 所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,
// 该基准就处于数列的中间位置。这个称为分区(partition)操作;
// 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
func QuickSort(arr []int, low, high int) {
var temp int
i := low
Expand Down
11 changes: 11 additions & 0 deletions go-implementation/Sorting-algorithm/sort-algo/Shell-sort.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,17 @@ package sort_algo
* @Description:
**/

// 1959年Shell发明,第一个突破O(n^2)的排序算法,是简单插入排序的改进版。
// 它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。
//
//算法描述:
// 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序
// 具体算法描述:
// 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;
// 按增量序列个数k,对序列进行k 趟排序;
// 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,
// 分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

func ShellSort(a []int) {
n := len(a)
h := 1
Expand Down

0 comments on commit da57aed

Please sign in to comment.