首页 > 其他分享 >交换排序(冒泡排序和快速排序)

交换排序(冒泡排序和快速排序)

时间:2022-12-16 15:00:28浏览次数:64  
标签:TableLen int ElemType 交换 elem 冒泡排序 ST 排序

学习时间2022.12.13

交换排序

基本概念

冒泡排序

基本概念来自菜鸟教程

  • 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
  • 示意图
    冒泡排序

快速排序

基本概念来自菜鸟教程解学武数据结构与算法教程

  • 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列。
  • 示意图
    快速排序

代码实现

基本数据结构

typedef int ElemType;

typedef struct {
	ElemType* elem;//整型指针
	int TableLen;//动态数组元素个数
}SSTable;

基本函数实现

void ST_init(SSTable& ST, int len) {
	ST.TableLen = len;
	//ST.elem = (ElemType*)malloc(sizeof(ElemType) * ST.TableLen);
	ST.elem = (ElemType*)calloc(ST.TableLen, sizeof(ElemType));
	//初始化随机数发生器
	srand(time(NULL));
	//输出0-100的ST.TableLen个随机数
	for (int i = 0; i < ST.TableLen; i++)
	{
		ST.elem[i] = rand() % 100;
	}
}

void swap(ElemType& a, ElemType& b) {
	int temp;
	temp = a;
	a = b;
	b = temp;
}

void ST_print(SSTable ST) {
	for (int i = 0; i < ST.TableLen; i++) {
		printf("%3d", ST.elem[i]);
	}
	printf("\n");
}

冒泡排序和对应main函数

void BubbleSort(ElemType A[], int n) {
	int i, j, flag;
	for (i = 0; i < n - 1; i++)
	{
		flag = 0;
		for (j = n - 1; j > i; j--)
		{
			if (A[j - 1] > A[j])
			{
				swap(A[j - 1], A[j]);
				flag = 1;
			}
		}
		if (0 == flag)
		{
			break;
		}
	}
}

int main() {
	SSTable ST;
	ST_init(ST, 10);
	ElemType A[] = { 32,45,11,324,32,59,90,85,1,49 };
	//memcpy(ST.elem, A, sizeof(A));
	ST_print(ST);
	BubbleSort(ST.elem, 10);
	ST_print(ST);
}
  • 对memcpy(ST.elem, A, sizeof(A));的解释
    • 这是将数组元素复制到另一个数组的函数

快速排序和对应main函数

int Partition(ElemType A[], int left, int right) {
	//k,i的具体含义可以看笔记里的图
	int k, i;
	k = left;
	for (i = left; i < right; i++)
	{
		if (A[right] > A[i])
		{
			swap(A[k], A[i]);
			k++;
		}
	}
	swap(A[k], A[right]);
	return k;
}
//递归实现快速排序
void QuickSort(ElemType A[], int low, int high) {
	//pivot是中枢的意思,在快排中pivotpos指我们选中的分割值。选择方法有很多,这里选择了数列的最后一个数
	if (low < high)
	{
		int pivotpos = Partition(A, low, high);
		QuickSort(A, low, pivotpos - 1);
		QuickSort(A, pivotpos + 1, high);
	}
}

int main() {
	SSTable ST;
	ST_init(ST, 10);
	ElemType A[] = { 32,45,11,324,32,59,90,85,1,49 };
	//memcpy(ST.elem, A, sizeof(A));
	ST_print(ST);
	Partition(ST.elem, 0, 9);
	ST_print(ST);
	QuickSort(ST.elem, 0, 9);
	ST_print(ST);
}

快速排序示意图

标签:TableLen,int,ElemType,交换,elem,冒泡排序,ST,排序
From: https://www.cnblogs.com/ayubene/p/16987367.html

相关文章

  • 管理型冗余工业交换机产品介绍
    由于工业环境对工业控制网络可靠性能的超高要求,工业以太网的冗余功能应运而生。从快速生成树冗余(RSTP)、环网冗余(RapidRing)到主干冗余(Trunking),都有各自不同的优势和特点。接......
  • 8口poe交换机产品介绍
    八口POE交换机(POE31008P)提供了从一个网络节点利用5类以太网线的电源和数据的传输。8+1端口快速以太网端口能用于10/100Mps的连接,其中8个端口可以提供工业标准的IEEE802.3af......
  • 8口PoE网口供电交换机适用环境介绍
    8口POE供电网络交换机“永不烧设备”智能POE交换机,先进的自感知算法只为IEEE802.3af终端设备供电,因而不需要去担心会损坏私有标准的PoE或非PoE设备。智能供电系统,过载保护......
  • IDEA中 maven webapp项目和springboot项目 配置热加载(热交换)1.4Tomcat部署时war和war
    目录​​1、提前说明​​​​1.1、idea汉化​​​​1.2idea的项目类型说明​​​​1.3ideawebapp配置tomcat并启动 ​​​​1.4Tomcat部署时war和warexploded区别​​......
  • 解决Zabbix数据库中表的字符集或排序规则不受支持的问题
    前言:在使用最新版zabbix(6.2)通过docker镜像来部署,结果页面告警“Zabbix数据库中表的字符集或排序规则不受支持***后面一堆数据表及字段”;解决方案:1:调整数据库字符集和排......
  • 极进交换机vlan配置及MTU修改
    2000.12.15--22.55极进交换机vlan配置及MTU修改 1、查看设备物理接口及vlan信息2、配置vlan3、查看设备mtu及三层接口mtu信息4、修改设备mtu及三层接口mtu5、查看......
  • RTL8380M/82M管理型交换机系统软件操作指南四:QoS/服务质量
    接下来对QoS进行详细的描述,主要包括以下七大内容:QoS概述、功能简介、拥塞管理、策略分类、调度方式、优先级映射配置、QoS端口配置.1.1QoS概述QoS(QualityofService,服务......
  • Go-快速排序
    packagemainimport("fmt""math/rand")//3,9,2,8,1,7,4,6,5,10//39,2,8,1,7,4,6,5,10//2,13,9,2,8,,7,4,6,5,10//9,2,8,,7,4,6,5,10/......
  • Go-冒泡排序
    packagemainimport"fmt"//11,9,2,8,3,7,4,6,5,10//911283746510//921183746510//928113746510//928311746510//9283......
  • Go-堆排序
    packagemainimport"fmt"funcHeapSort(arr[]int)[]int{length:=len(arr)fori:=0;i<length;i++{lastmesslen:=length-i//......