数据结构——排序(二)

数据结构——排序(一)

1.1简单选择排序

对a[]进行排序,每次选择未排数组内最小的元素,放到最终位置,即第i趟时,最小元素与a[i]进行交换。
空间复杂度O(1),时间复杂度O(n^2)

void sim_selSort(int a[],int n) {
   
	int i, j, min_p;//min_p:最小元素在数组中的位置
	for (i = 0; i < n - 1; i++) {
            //进行逐一扫描,共n-1趟
		min_p = i;                        //第i趟时,a[i]作为最开始的最小元素
		for (j = i + 1; j < n; j++) {
        //在未排序中进行扫描
			if (a[j] < a[min_p]) {
           //若有元素小于现最小元素,min_p定位更改
				min_p = j;
			}
		}
		if (min_p != i) {
                    //第i趟,最小元素不是a[i]
			swap(a[i], a[min_p]);         //最小元素a[min_p]交换到a[i]
		}
	}
	return ;
}

1.2堆排序

堆包括:大根堆、小根堆
以大根堆为例:满足a[i]>=a[2i] && a[i]>=a[2i+1] ,每一个非叶子结点的数都大于其子结点,即都是大根堆。

对a[]进行排序:
①初始堆:将原数组a[]以完全二叉树的形式生成初始堆(代码无需额外处理)
②建堆:从最小的非叶子结点开始处理,该结点与其叶子结点比较,数值最大的放在双亲结点,直到根结点
③推出堆顶元素后:堆最后一个元素代替堆顶,再重复进行建堆操作,直到所有元素出堆
空间复杂度O(1),时间复杂度O(nlog2n)
每次调整(插入/删除)的时间复杂度O(h)->O(log2n)
代码:

//建堆、调整堆
void heapAdjust(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值