【排序】交换排序

1. 冒泡排序

void BubbleSort(SqList &L){
	int n = L.length - 1;
	bool flag = 1;   //标记是否交换过
	
	while(n > 0 && flag){
		flag = 0;
		for(int i = 1; i <= n; i++){
			if(L.r[i].key > L.r[i+1].key){  //如果存在逆序则交换 
			    flag = 1; 
				t = L.r[i];
				L.r[i] = L.r[i+1];
				L.r[i+1] = t;
			}
		}
		--n;   //每一次排序过程中确定最大的数 
	} 
}

算法执行过程

66960e1ac7bc40998f29d89da8fec803.jpg


2. 快速排序

void Partion(SqList &L, int low, int high){
	L.r[0] = L.r[low];   //第一个关键字作为支点
	pivotkey = L.r[low].key;
	
	while(low < high){
		
		while(low < high && L.r[high].key >= pivotkey) --high;
		L.r[low] = L.r[high];
		while(low < high && L.r[low].key <= pivotkey) ++low;
		L.r[high] = L.r[low];
		
	} 
	L.r[low] = L.r[0];
} 
void QSort(SqList &L,int low,int high){
	
	pivoitkey = Partion(L,low,high);
	Qsort(L,low,pivotekey - 1);
	QSort(L,pivotekey + 1,high);
}
void QuickSort(SqList &L){
	QSort(L,1,L.length);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值