归并排序(MergeSort)和快速排序(QuickSort)

归并排序和快速排序

1.归并排序

归并排序(MergeSort)和快速排序(QuickSort)就是把数组的数,分为一个个有序的个体,再两两结合.
对给定数组排序升序:[8,4,5,6,2,1,7,3]
1.先将其分为一个个有序的个体:[8],[4],[5].[6].[2].[1],[7],[3]
2.两两合并并保持有序:[4,8],[5,6],[1,2],[3,7]
3.继续合并:[4,5,6,8],[1,2,3,7]
4.最后合成一个有序序列:[1,2,3,4,5,6,7,8]

2.快速排序

从a[0:n-1]中选择一个元素作为middle,该元素为支点把余下的元素分割为两段left和right,使得left中的元素都小于等于支点,而right中的元素都大于等于支点
递归地使用快速排序方法对left进行排序递归地使用快速排序方法对right进行排序,
所得结果为left+middle+right
对[4,8,3,7,1,5,6,2]快速排序.(选第一个元素为middle,即4)
1.设两个游标i,j,i指向8,j指向2

while(true){
	do{ i=i+1;
	}while(a[i]=middle的元素
	do{ j=j-1;
	}while(a[j]>middle); //在右侧寻找<=middle的元素
	if(i>=j)break;//未发现交换对象
	Swap(a[i],a[j]);
}

即i的值要比middle(4)小,否则要j选出比middle小的值与之交换,
所以i=8比4大,现在j=2<4,因此8与2交换.
然后i继续走,i=3<4,符合,继续走,i=7>4,不符合,故j=8,不行,往前,j=6,一直到j=1<4,此时,交换,继续,就i>j退出,
再将middle与此时j=1,交换,
数组变化过程:
1.[4,2,3,7,1,5,6,8]
2.[4,2,3,1,7,5,6,8]
3.[1,2,3,4,7,5,6,8]
再将[1,2,3],[7,5,6,8]进行快速排序即可

你可能感兴趣的:(数据结构)