快速排序的迭代实现

/*
*快速排序的递归形式
*/

#include<stdio.h>
#include<stdlib.h>

/*
*	划分算法
*	输入:数组arr[low,high] 
*	输出:主元位置
*	Parm:
*		i:指向标杆的指针
*		j:指向要与标杆比较元素的指针 
*		x:标杆元素 
*		
* 
*	思想:
*		 1.将数组arr元素arr[low]作为标杆
*		 2.开始:i指向arr[low],j开始指向第arr[low+1]
*		 3.比较 j元素和标杆元素的大小 
*			当 x < *j,即j指向的元素大于标杆元素,j++继续执行循环
*			当 x >= *j,即j指向的元素小于标杆元素,i++(i向后移动一位),
*				判断i、j是否指向同一个元素
*				如果i != j,即i、j不指向同一个元素 ,则互换i、j所指向元素 
*		4.执行完比较后,i指向元素前的除标杆元素(arr[low])包括i指向的元素的所有元素的值,都小于标杆元素;
*						i指向元素后的所有元素的值都大于标杆元素 
*		5.交换标杆元素和i指向元素,即得到:i 指向元素前的所有元素都小于该元素,i指向元素后的所有元素都大于该元素 
* 
*/ 
int split(int *arr, int low, int high){
	int *i, *j;
	int x;
	int temp;

	i = arr + low;
	x = *i;


	for (j = i + 1; j <= arr + high; j++){

		if (x >= *j){
			i++;
			if (i != j){
				temp = *i;
				*i = *j;
				*j = temp;
			}
		}
	}
	temp = *(arr + low);
	*(arr + low) = *i;
	*i = temp;

	return i - arr;
}

/*
*	快速排序迭代实现
*	输入:arr[start,end]
*	数组:arr数组所有元素排好顺序
*	parm:
*		arr[start,end] 
*	步骤:
*		1.通过划分算法得到该数组标杆元素(即第一个元素)的正确位置
*		2.通过递归实现标杆元素左边所有元素排序
*		3.通过递归实现标杆元素右边所有元素排序
*/
 

void quickSort(int *arr, int start, int end){

	if(start < end){
		int m;
		m = split(arr, start, end);

		quickSort(arr,start,m - 1);
		quickSort(arr,m + 1,end);

	}
	
}

int main(void){

	int arr[8] = { 5, 3, 8, 99, 11, 0, 2, 3 };
	int i;
	
	quickSort(arr, 0, 7);

	for (i = 0; i < 8; i++){
		printf("%d	", arr[i]);
	}


	system("pause");
	return 0;
}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值