一趟快排的设计与实现

快速排序
一、快速排序的思想

安排三个变量low high key.
1、分配最初值:
	low指向第一个,high指向最后一个,key既是设定的基准(自定义),一般就以第一个。
	low = 1;high = n-1; 分别指向L.elem[1]、L.elem[n-1]--以序号的赋值方便交换数据--
2、一趟排序过程:
	在low<=high的前提下:
		从high端往前查找第一个比key值小的,与key交换位置。
		再从low端往后查找第一个比key值大的,与key交换位置。 
3、每一趟都将所排序列分为左右两部分,左边比基准小,右边比基准大。

二、代码实现:
顺序存储方式

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

/*
	快速排序的思想:
		安排三个变量low high key.
		分配最初值:
			low指向第一个,high指向最后一个,key既是设定的基准(自定义),一般就以第一个。
			low = 1;high = n-1; 分别指向L.elem[1]、L.elem[n-1]。
			以序号的赋值方便交换数据。
		一趟排序过程:
			在low<=high的前提下:
				从high端往前查找第一个比key值小的,与key交换位置。
				再从low端往后查找第一个比key值大的,与key交换位置。 
		每一趟都将所排序列分为左右两部分,左边比基准小,右边比基准大。
		  
*/ 
typedef struct{
	int elem[9];//约定零号单元不存放信息-个人爱好哈。。 
	int length;//表长 
}SqList;

//一趟快排算法 
void Partition(SqList &L,int k,int &i);//k代表基准,i代表基准的位置。 
int main(){
	SqList L;
	//L.elem[6] = {5,2,6,3,8};
	int m;
	for(int j = 1;j<6;j++){
		scanf("%d",&m);
		L.elem[j] = m;
	}
	int key = 1;
	Partition(L,L.elem[1],key);
	
	printf("%d  key",key);//一趟和基准所在位置 
	printf("一趟快速排序后");
	for(int i = 1;i<6;i++){
		printf("%d ",L.elem[i]);
	}
	return 0;
}

void Partition(SqList &L,int k,int &i){
	int low = 1;//低位 
	int high = 5;//高位 
	while(low <= high){
		while(low<=high&&L.elem[high] >= k){//找到需要比k小的关键字所在的位置
			high--;
		}
		//交换位置k和high的值 
		L.elem[i] = L.elem[high];
		L.elem[high] = k;
		i = high;
		while(low <= high && L.elem[low] <= k){//找到需要比k大的关键字所在的位置 
			low++;
		}
		//交换位置k和low的值 
		L.elem[i] = L.elem[low];
		L.elem[low] = k;
		i = low;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值