大二汪的期末复习-算法与数据结构(排序)

这篇博客介绍了排序的基本概念,包括内部排序方法的分类,并详细讲解了插入排序、交换排序(冒泡排序和快速排序)、选择排序(简单选择排序和堆排序)的原理和特点。内容涵盖直接插入排序、折半插入排序、冒泡排序、快速排序和堆排序的时间复杂度和适用场景。
摘要由CSDN通过智能技术生成

8.1 排序基本概念和方法概述

8.1.1 排序的基本概念

  • 排序是按关键字的非递减或非递增顺序对一组记录重新进行排列的操作。
  • 排序的稳定性
  • 内部排序:待排序记录全部存放在计算机内存中进行排序。
  • 外部排序:待排序记录的数量很大,,以致内存一次不能容纳全部记录,在排序过程中需对外存进行访问的排序过程。

8.1.2 内部排序方法的分类

(1) 插入类:

  • 直接插入排序
  • 折半插入排序
  • 希尔排序

(2)交换类:

  • 冒泡排序
  • 快速排序

(3)选择类:

  • 简单选择排序
  • 树形选择排序
  • 堆排序

(4)归并类:

  • 2-路归并排序

(5)分配类:

  • 基数排序

8.2 插入排序

每一趟将一个待排序的记录,按其关键字的大小插入到已经排好的一组记录的适当位置上,直到所有待排序记录全部插入为止。

直接插入排序

(按顺序取出待排序记录的关键字,和已排序的进行比较)
在这里插入图片描述

void InsertSort(int a[100],int l){
   
	for(int i=2;i<=l;++i){
   
		a[0]=a[i];
		a[i]=a[i-1];
		for(j=i-2;a[0]<a[j];--j)
			a[j+1]=a[j];
		a[j+1]=a[0];
	}
}

在a[0]处设置监视哨。
该算法时间复杂度为O(n2)。
空间复杂度为O(1)。

算法特点:简便易实现;稳定排序;也适用于链式存储结构;更适合于初始记录基本有序的情况,当无序n较大时,时间复杂度较高不宜使用。

折半插入排序

step1. 首先确定整个查找区间的中间位置mid=(left + right ) / 2   
step2. 用待查关键字值与中间位置的关键字值进行比较。若相等,则查找成功0;若大于,则在右半个区域继续进行折半查找;若小于,则在左半个区域继续进行折半查找
Step3. 对确定的缩小区域再按折半公式,重复上述步骤。 最后,得到结果:要么查找成功, 要么查找失败。= 折半查找的存储结构采用一维数组存放。

原始数据:[49, 38, 10, 97, 76, 13, 27]
第0次排序数据:[38, 49, 10, 97, 76, 13, 27]
第1次排序数据:[10, 38, 49, 97, 76, 13, 27]
第3次排序数据:[10, 38, 49, 76, 97, 13, 27]
第4次排序数据:[10, 13, 38, 49, 76, 97, 27]
第5次排序数据:[10, 13, 27, 38, 49, 76, 97]
排序后数据:[10, 13, 27, 38, 49, 76, 97]

void BInsertSort(int a[100],int n){
   
	for(int i=2;i<n;++i){
   
		a[0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值