数据结构--排序算法总结

def bubbleSort(array):
    flag  = False
    length = len(array)
    for i in range(length):
        for j in range(length-i-1):
            if array[j]>array[j+1]:
                temp = array[j]
                array[j] = array[j+1]
                array[j+1] = temp
                flag = True
        if flag==False:
            break
    return array

冒泡排序算法,稳定的排序算法、原地排序算法(空间复杂度为O(1)).一个数组的逆序度最大为n*(n-1)/2.


def selectSort(array):
    length = len(array)
    for i in range(length-1):
        little = i
        for j in range(i+1,length):
            if array[j]<array[little]:
                little = j
        if little!=i:
            temp = array[i]
            array[i] = array[little]
            array[little] = temp
    return array
选择排序,最坏、最好、平均时间复杂度均是O(n2)
def insertionSort3(array):
    length = len(array)
    for i in range(1,length):
        temp = array[i]
        j = i-1
        while j>=0:
            if array[j]>temp:
                array[j+1] = array[j]
            else:break
            j-=1
        array[j+1] = temp
    return array

插入排序,最好时间复杂度O(n),最坏和平均时间复杂度为O(n2)

插入排序、选择排序、冒泡排序空间复杂度为O(1),其中冒泡排序、插入排序是稳定排序。

def binary_search(array,value):
    length = len(array)
    low = 0
    high = length-1
    while low <= high:
        mid = (high-low)//2 + low
        if array[mid] == value:
            return mid
        elif value <array[mid]:
            high = mid-1
        else:
            low = mid+1
print(binary_search([1,3,5,7,8,10,11],11))
#二分查找时间复杂度O(logN),空间复杂度O(1)
#二分查找递归实现
def bsearchInternally(array,low,high,value):
    if low > high:
        return -1
    mid = low + ((high-low)>>1)
    if array[mid] == value:
        return mid
    elif array[mid] < value:
        return bsearchInternally(array,mid+1,high,value)
    else:
        return bsearchInternally(array,low,mid-1,value)
def bsearch(array,n,value):
    return bsearchInternally(array,0,n-1,value)


aa = bsearch([1,3,5,7,8,10,11],7,11)
# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def binarySearch(self,array,value):
        length = len(array)
        low = 0
        high = length-1
        while low <= high:
            mid = ((high-low)//2)+low
            if array[mid] == value:
                return mid
            elif array[mid]<value:
                low = mid+1
            else:
                high = mid-1
        return -1
    def Find(self, target, array):
        rows = len(array)
        colunms = len(array[0])
        for row in range(rows):
            #每一行array[row],一个有序数组,二分查找
            temp = self.binarySearch(array[row],target)
            if temp !=-1:
                return True
        return False
def merge(left,right):
    ans = []
    i,j = 0,0
    while i < len(left) and j <len(right):
        if left[i]<right[j] :
            ans.append(left[i])
            i+=1
        else:
            ans.append(right[j])
            j += 1
    if j==len(right):
        ans.extend(left[i:])
    else:
        ans.extend(right[j:])
    return ans


def mergeSort(data):
    if len(data)>=2:
        mid = len(data)//2
        left = mergeSort(data[:mid])
        right = mergeSort(data[mid:])
        return merge(left,right)
    else:
        return data
# print(mergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45]))
#判断链表是否有环,快慢指针法
class Solution(object):
    def hasCycle(self, head):
        """
        :type head: ListNode
        :rtype: bool
        """
        if head == None or head.next == None:
            return False
        slow = fast = head
        while fast and fast.next:
            slow = slow.next #慢指针一次一步
            fast = fast.next.next#快指针一次两步
            if slow == fast:#相遇时,刚好慢的走一圈,快的走两圈
                return True
        return False

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
十大经典排序算法是指在计算机科学中常用的排序算法,它们分别是: 1. 冒泡排序(Bubble Sort):重复地比较相邻的两个元素,将较大的元素逐渐向右移动。 2. 选择排序(Selection Sort):每次从未排序的部分选择最小(或最大)的元素,并放在已排序的部分的末尾。 3. 插入排序(Insertion Sort):将未排序的元素逐个插入到已排序的部分中的正确位置。 4. 希尔排序(Shell Sort):将待排序的数组按照一定步长进行分组,对每组进行插入排序,逐渐减小步长。 5. 归并排序(Merge Sort):将待排序的数组递归地分成两半,对每一半进行排序,然后合并两个有序数组。 6. 快速排序(Quick Sort):选择一个基准元素,将数组划分为两部分,左边部分都小于基准,右边部分都大于基准,递归地对两部分进行排序。 7. 堆排序(Heap Sort):将待排序的数组构建成一个最大堆(或最小堆),然后依次取出堆顶元素并调整堆结构。 8. 计数排序(Counting Sort):统计数组中每个元素出现的次数,然后根据统计结果对元素进行排序。 9. 桶排序(Bucket Sort):将待排序的数组划分为多个桶,对每个桶中的元素进行排序,最后将桶中的元素按顺序合并。 10. 基数排序(Radix Sort):按照元素的位数,将待排序的数组从低位到高位进行排序。 以上是十大经典排序算法,每种算法都有其适用的场景和性能特点,选择合适的排序算法可以提高程序的效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值