数据结构11 排序

目录

移动排序

冒泡排序

算法分析

快速排序

原理

代码实现

算法分析

选择排序

入门

代码实现

算法分析

堆排序

原理

堆调整

代码实现

堆建立

代码实现

算法分析

归并排序

基数排序

比较


移动排序

冒泡排序

 ​​​​​​

 flag盯是不是排好了

(为什么感觉老师的错了,第二个for的第二个判断

条件)

void BubbleSort(SqList &L , int n){
	int m , u, flag = 1; //m 趟数  , n 元素个数 , u 每趟比大小次数
	RedType x;
	for(m = 1 ; m <= n - 1 && flag == 1; m++){
		flag = 0;
		for(u = 1 ; u <= n - m ; u++){
			if(L.r[u].key < L.r[u + 1].key){
				flag = 1;
				x = L.r[u];
				L.r[u] = L.r[u + 1];
				L.r[u + 1] = x;
			}
		}
	}
}

算法分析

 

比较发现一次逆序,赋值3次

∴乘3

快速排序

原理

↑太浪费空间啦!

↓先把中心点放界点,low high 间断比较

代码实现

int Partition(SqList &L , int low , int high){
	L.r[0] = L.r[low];
	int 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];
	return low;
}

void QSort(SqList &L , int low , int high){
	if(low < high){
		int pivotloc = Partition(L , low , high);
		QSort(L , low , pivotloc - 1);
		QSort(L , pivotloc + 1 , high);
	}
}

#include<stdlib.h>

qsort 香啊

算法分析

 

基本有序(不论递增或递减)

越乱越快(改变中心点的选取)

选择排序

入门

代码实现

#include<stdio.h>
#define MAXSIZE 20

typedef int KeyType;
typedef int InforType;
typedef struct{
	KeyType key;
	InforType otherinfor;
}RedType;
typedef struct{
	RedType r[MAXSIZE + 1];
	int length;
}SqList;

void SelectSort(SqList &L){
	for(int i = 1 ; i < L.length ; i++){
		int k = i;
		for(int j = i + 1 ; j <= L.length ; j++){
			if(L.r[j].key < L.r[k].key){
				k = j;
			}
		}
		if(k != i){
			RedType swap = L.r[k];
			L.r[k] = L.r[i];
			L.r[i] = swap;
		}
	}
}

每次在无序里挑一个最小(最大)的,放到无序的头,有序的加一

算法分析

但可以通过优化,变成稳定排序

堆排序

原理

双亲结点 n 的左孩子 2n 

                       右孩子 2n + 1

堆调整

代码实现

堆建立

代码实现

算法分析

(时间效率贼稳定)

归并排序

(归并树)

趟数等于树的高度

基数排序

比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值