IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Leecode第三次打卡 -> 正文阅读

[数据结构与算法]Leecode第三次打卡

排序专题一

1、选择排序

class Solution(object):
    def sortArray(self, nums):
        l = len(nums)    
        for i in range(l-1):
            min_i = i                                     
            for j in range(i+1,l):
                if(nums[min_i]>nums[j]):         
                    min_i = j
            if i != min_i:
                nums[i],nums[min_i] = nums[min_i],nums[i]
        return nums

大循环控制当前将要排序的元素,小循环从将要排序的元素的下一个位置开始遍历,寻找比当前元素更小的元素,若找到则将其下标赋予min_i。

循环结束,若当前元素不是最小,则当前元素与nums[min_i]交换。

2、插入排序

class Solution(object):
    def sortArray(self, nums):
        l = len(nums)    
        for i in range(1,l):
            temp = nums[i]
            j = i
            while j>0 and nums[j-1]>temp:
                nums[j] = nums[j-1]
                j -= 1
            nums[j] = temp
        return nums

1、从数组的第二个元素开始遍历,首先记录它的值至temp中,记录它的下标至j中;

2、当 j大于0 且 当前元素的值temp小于前一个元素的值nums[j-1]时,就将前一个元素向后移一位,循环操作;

3、退出循环后,将temp赋给nums[j],即将i所指的元素插入到升序位置上。

3、希尔排序

class Solution(object):
    def sortArray(self, nums):
        size = len(nums)    
        gap = size//2
        while gap > 0:
            for i in range(gap,size):
                temp = nums[i]
                j = i
                while j>=gap and nums[j-gap]>temp:
                    nums[j] = nums[j-gap]
                    j -= gap
                nums[j] = temp
            gap //= 2
        return nums   

1、希尔排序将数组按照一定的间隔分为若干个组,再利用插入排序进行排序,间隔一般为size/2;

2、递归运行直至间隔为1,虽然原始数组就是间隔为1的数组,但是通过分组的方法可以大大减少运行时间。

4、归并排序

def merge(left_arr, right_arr):
    arr = []
    while left_arr and right_arr:
        if left_arr[0] <= right_arr[0]:
            arr.append(left_arr.pop(0))
        else:
            arr.append(right_arr.pop(0))
    while left_arr:
        arr.append(left_arr.pop(0))
    while right_arr:
        arr.append(right_arr.pop(0))
    return arr

def mergeSort(arr):
    size = len(arr)
    if size < 2:
        return arr
    mid = len(arr) // 2
    left_arr, right_arr = arr[0: mid], arr[mid:]
    return merge(mergeSort(left_arr), mergeSort(right_arr))

归并排序将数组依次分为len(nums)个组,len(nums-1)组……直到1个组,合并组时按照两个组中第一个元素的相对大小进行出栈,当其中一组的元素个数为0时,便直接将另一组的元素按照原来的顺序全部添加到新的数组中,递归上述过程直到所有的组合并为1个数组,完成排序。

5、快速排序

import numpy as np
import sys
np.random.seed(1)
nums = np.random.randint(10,size=8)
print(nums)
def QuickSort(nums,left,right):
    if left >= right:
        return 0
    basenumber = nums[left]
    i = left
    j = right
    while i!=j:
        while i < j and nums[j] >= basenumber:
            j -= 1
        while j > i and nums[i] <= basenumber:
            i += 1
        if i < j:
            nums[i],nums[j] = nums[j],nums[i]

    nums[i],nums[left] = nums[left],nums[i]
    
    QuickSort(nums,left,i-1)
    QuickSort(nums,i+1,right)
QuickSort(nums,0,nums.size-1)
print(nums)
[5 8 9 5 0 0 1 7]
[0 0 1 5 5 7 8 9]

1、左右哨兵分别指向数组第一个与最后一个元素,设置一个基数basenumber = nums[left](数组的第一个元素)

2、首先从右哨兵开始判断,当右哨兵所指的元素值大于等于基数时,向左移动;

然后判断左哨兵,当左哨兵所指的元素值小于等于基数时,向右移动;

3、若跳出循环意味着右哨兵小于基数,左哨兵大于基数。此时交换左右哨兵,重复步骤2

4、当跳出大循环时,说明左哨兵与右哨兵指向了同一个位置,此时将基数与所指位置的值交换,完成第一次排序,

5、递归执行完成快速排序

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:22:35  更:2021-11-25 08:23:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:22:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码