挑战二--第七章高等排序(二)

版权声明:随便写写,也不重要,欢迎挑错讨论 https://blog.csdn.net/qq_37305947/article/details/79858679

7.2分割

具体来说,分割并不算排序,具体功能就是将一个数组分成两部分,前半部分均小于 数组中其中一个值,后半部分均大于这个值,(但是这两部分并不是有序的) 函数返回值返回这个值的下标。


具体实现操作:

定义一个变量i记录比规定值(以下称这个规定分割值为 a[r]) 小或者大的分界下标。

定义一个变量从头向后遍历,决定每一个元素是属于那个部分:

    如果大于a[r]则不必移动元素,只需将该变量向后移,将该元素纳入“大于组”

    如果小于a[r]组先让i变量向后移动一个位置,然后交换上一个元素,这样该元素则进入“小于组”,而前一个元素还在“大于组”。

最后将最规定值与找到的分界下标所对应的值交换 返回分界下标。

算法复杂度:O(n) 

分割也会交换不相邻的元素 所以具体排序用到分割时,这种排序(下一章的快速排序....)将不稳定。

代码实现

int partition(int a[],int p,int r){
	int x=a[r];
	int i=p-1;
	for(int j=p;j<r;j++){
		if(a[j]<=x){
			i++;
			swap(a[i],a[j]);
		}
	
	}
	swap(a[i+1],a[r]);
	 
	return i+1;
}
我我我。。。这个语言表达能力 。。。。文字表达能力 。。。确实。。。需要加强。。。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。。。。

猜你喜欢

转载自blog.csdn.net/qq_37305947/article/details/79858679