排序算法介绍及实现:选择;冒泡;归并;快排等

本文介绍了四种经典的排序算法:选择排序、插入排序、冒泡排序、归并排序和快速排序。每种算法详细阐述了其思路、时间复杂度,并给出了伪代码。其中,归并排序和快速排序平均时间复杂度为O(N Log N),而选择排序、插入排序和冒泡排序的时间复杂度为O(n^2)。
摘要由CSDN通过智能技术生成

排序算法

记录一下最近学习的各种排序算法。

选择排序

选择排序是最简单且容易想到的排序方法。它把输入值(以下均以列表为例)分为两个部分:已排序 和 未排序部分。

先看一组伪代码:

for (i = 0; i < numbersSize - 1; ++i){
   
	//找到未排序部分中最小值的索引值
	indexSmallest = i
	for (j = i + 1; i < numbersSize; ++j){
   
		if (numbers[j] < numbers[indexSmallest]){
   
			indexSmallest = j
		}
	}
	//找到余下值中最小的索引值,与第i个值交换。若没找到则不变
	temp = numbers[i]
	numbers[i] = numbers[indexSmallest
	numbers[indexSmallest] = temp
}

思路:

  1. 两个循环把列表分为已排序和未排序两部分,用 i,j 去表示
  2. 该算法找到未排序中最小值的索引值
  3. 把索引值上的元素与i元素交换
  4. i,j 更新,表示出新的已排序未排序部分
  5. 直到 i 小于长度 -1,遍历停止。因为不再需要单独遍历最后一个元素。

时间复杂度:O(n^2)

该算法或将运行多次比较。当列表长度为N时,外层循环将执行 N - 1 次。在这些外循环中,内层循环每次将执行平均 N / 2 次。所以,(N - 1) x (N / 2) = O(N ^ 2)。此算法也是众多排序算法中最慢的算法之一。


插入排序

同样的,插入排序也将列表分为已排序和未排序部分。不同的是,此算法每次只在未排序部分中提取第一个元素,然后把它放到已排序部分中合适的位置。

先看一组伪代码:
在这里插入图片描述

for (i = 1; i < numbersSize; ++i){
   
	j = 1
	//把第i个元素放入到已排序的部分(第二个元素开始。默认第一个元素是以排好部分)
	//i已经到第一个位置时,或当第i个元素放入到正确位置时,停止while循环。
	while (j > 0 && number[j] < numbers[j - 1]){
   
		//把第i位的数和前一位交换 [j]和[j-1]
		temp 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值