go语言实现十大经典排序算法---归并排序

 将一个大的无序数组有序,我们可以把大的数组分成两个,然后对这两个数组分别进行排序,之后在把这两个数组合并成一个有序的数组。由于两个小的数组都是有序的,所以在合并的时候是很快的。

go语言实现十大经典排序算法---归并排序_第1张图片

非递归代码:

func mergeSort(arr []int){
	n := len(arr)
	for i:=1;i= n {
				break
			}
			merge(arr,left,mid,right)
			left = right + 1
			mid = left + i -1
			right = mid + i
		}
		if left < n && mid < n{
			merge(arr,left,mid,n-1)
		}
	}
}

func merge(arr []int,left,center,right int){
	i := left
	j := center+1
	temp := []int{}
	for {
		if !(i<=center&&j<=right){
			break
		}
		if arr[i]center {
			break
		}
		temp = append(temp,arr[i])
		i++
	}
	for{
		if j>right {
			break
		}
		temp = append(temp,arr[j])
		j++
	}
	for z:=0;z

性质:1、时间复杂度:O(nlogn)  2、空间复杂度:O(n)  3、稳定排序  4、非原地排序

你可能感兴趣的:(基础,golang)