数据结构 排序

知识要点:

1、插入排序法(含折半插入排序法)、选择排序法、泡排序法(冒泡排序)、快速排序法、

堆积排序法(堆排序)、归并排序、基数排序等排序方法排序的原理、规律和特点;

2、各种排序算法的时空复杂度的简单分析。

排序的稳定性:排序后不改变原序列中相同元素的相对顺序,则此排序方法是稳定的,反之是不稳定的;

                         一般情况下,排序的稳定性与其效率成反比;

插入排序法(含折半插入排序法):

算法思想:每次将一个待排序的数据,跟前面已经有序的序列的数字一一比较找到自己合适的位置,插入到序列中,直到全部数

据插入完成。(找位置+挪位置)

void InsertSort(int data[],int n){
	int j;
	for(int i=1;i<n;i++){
		int t=data[i];//待插入数据
		for(j=i;j>0;j--){
			if(data[j-1]>t){
				data[j]=data[j-1];
				//元素后移;
			}
			else{
				break;
				//找到插入位置
			}
		}
		data[j]=t;
	}
}

折半插入排序和插入排序的时间复杂度相同,两者的区别在于比较的次数不同 ,对于插入排序最坏比较次数为n(n-1)/2,即平均

比较次数为n^2数量级;而对于折半插入排序,采用折半查找的方式查找元素的插入位置,平均比较次数为nlogn数量级;两者的

就在于确定元素插入位置的比较次数;

时间复杂度:O(n^2);    稳定性:稳定;

选择排序法:

算法思想:  数组分成有序区和无序区,初始时整个数组都是无序区,然后每次从无序区选一个最小的元素直接放到有序区的最

后,直到整个数组变有序区。每一次选择待排序列中的最小(最大)的值放入有序序列为尾部;

void SelectSort(int data[],int n){
	for(int i=0;i<n;i++){
		int t=i;
		for(int j=i+1;j<n;j++){
			if(data[j]<data[t]){
				t=j;
			}
		}
		if(t!=i){
			int temp=data[t];
			data[t]=data[i];
			data[i]=temp;
		}
	}
}

时间复杂度:O(n^2);    稳定性:不稳定/稳定;(基于交换的是不稳定的,基于插入的是稳定的)</

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值