数据结构之基本的排序算法汇总

本文介绍了几种常见排序算法的原理,包括冒泡排序、快速排序、直接插入排序、希尔排序和选择排序。冒泡排序通过比较相邻元素交换位置;快速排序选基准值划分左右数组;直接插入排序选基准值插入合适位置;希尔排序是直接插入排序的改进;选择排序不断找最小值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 冒泡排序

原理:

比较相邻的两个元素的大小,如果前面的元素大于后面的元素,就交换两个元素的值。比较最后两个元素后,最后一个元素就是最大的值。重复比较所有的元素,直到不出现前面的元素大于后面的元素。这样我们就可以得到一个从小到大的列表。

"冒泡排序"
array = [1,2,4,1,3,5,-1,4,7,5,9,-5]
lenth = len(array)-1
def BubbleSort(array):
    for i in range(lenth):
        if i<=lenth:
            for  j in range(lenth-i):
                if array[j]>array[j+1]:
                    array[j],array[j+1] = array[j+1],array[j]
    return array
print(BubbleSort(array))
  • 快速排序

原理:

快速排序采用的是,先选择一个基准值,这个基准值采用的是中间下标的值,利用这个基准值来比较列表。再定义两个数组left,right。比基准值小的数值放入到left数组中,比基准值大的数值放入到right数组中。最后对这两个数组重复以上的步骤,就可以得到排序好的数组。

"快速排序"
array = [1,2,4,1,3,5,-1,4,7,5,9,-5]
def QuickSort(array):
    left ,right =[],[]
    if len(array) > 2:
        mid = array[len(array)//2]
        array.remove(mid)
        for i in array:
            if i<mid:
                left.append(i)
            else:
                right.append(i)
        return QuickSort(left)+[mid]+QuickSort(right)
    return array
print(QuickSort(array))
  • 直接插入排序

原理:

选取一个基准值,这个基准值开始时可以选择下标为i=1的元素,以这个基准值比较其前面的元素。如果该基准值小于前面下标为x的值,就将该值插入到下标为x的元素。然后下标向右移动,直到i=len(array)-1时为止,这时得到的就是一个新的有序表。

"直接插入排序"
array = [1,2,4,1,3,5,-1,4,7,5,9,-5]
def InsertionSort(array): 
    for i in range(1, len(array)): 
        mark = array[i] 
        j = i-1
        while j >=0 and mark < array[j] : 
                array[j+1] = array[j] 
                j -= 1
        array[j+1] = mark 
    return array
print(insertionSort(array))
  • 希尔排序

希尔排序是直接插入排序的升华版,比直接插入排序快,还不容易崩盘。

希尔排序采用的是增量插入,先来明确这个增量取法:

gap = len(array)/2

gap = gap/2  ....

直到 gap = 1时,基本上该序列就为有序的序列,最后再执行一个直接插入就行。

"希尔排序"
array = [1,2,4,1,3,5,-1,4,7,5,9,-5]
def shellSort(array):
    leng = len(array)
    gap = int(leng/2)
    while gap>0:
        for i in range(gap,leng):
            mark = array[i]
            j = i
            if j>=gap and array[j-gap]>mark:
                array[j] = array[j-gap]
                j -= gap
            array[j] = mark
        gap = int(gap/2)
    return array
print(shellSort(array))
  • 选择排序

原理:

该排序也是先确定一个基准值,先以此基准值为最小值下标为0,用这个“最小值”对比其他的元素,如果出现有元素x比该基准值小时,将x的下标替换掉该基准值的下标,一直循环到最后一个元素,这样得到的最小元素就是当前最小的值。然后重复该步骤,直到基准值的下标为len(array)-1时结束循环,这样就得到了一个排序好的新表。

"选择排序"
array = [1,2,4,1,3,5,-1,4,7,5,9,-5]
def SelectSort(array):
    leng = len(array)
    for i in range(leng):
        min = i
        for j in range(i+1,leng):
            if array[j]<array[min]:
                min = j
        array[i],array[min] = array[min],array[i]
    return array
print(SelectSort(array))

 

 

转载于:https://www.cnblogs.com/LcqHomepage/p/11159162.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值