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 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 让我们愉快地手写一些排序吧 -> 正文阅读

[游戏开发]让我们愉快地手写一些排序吧

def BinSort(sequence):
    start = -1
    sequence.insert(0,-1)
    for i in range(2, len(sequence)):
        x = sequence[0] = sequence[i]
        left,right = 1,i-1
        if x >= sequence[right]:
            start = i
        elif x < sequence[left]:
            start = left
        else:
            while right - left > 1:
                mid = (left + right)//2
                if x >= sequence[mid]:
                    left = mid
                else:
                    right = mid
            start = right
        move = i-1
        while move >= start:
            sequence[move+1] = sequence[move]
            move -= 1
        sequence[start] = x
    return sequence[1:]
def heap_crt(Array):#index 0 as sentinal
    n = len(Array) - 1
    i = n//2
    while i >= 1:
        heap_ajt(Array, i, n)#由完全二叉树以及函数的性质 此处最后一个参数选n可以正确判断边界
        i -= 1

#index 0 as sentinal
#I FOR EMPTY, J FOR CANDIDATE
#A[k...m] as a heap k < m
def heap_ajt(Array, k, m):#仅root不对劲时的调整
    x = Array[0] = Array[k]
    i,j = k,k*2
    while j <= m :#这个while不满足,即Array[i]已无子节点
        if j + 1 <= m and Array[j+1] > Array[j]:
            j = j + 1#j targets the bigger
        if Array[j] <= x:
            break
        else:#Array[j] > x
            Array[i] = Array[j]
            i = j
            j = i * 2
    Array[i] = x

def heapsort(Array):
    Array.insert(0, -1)
    heap_crt(Array)
    n = len(Array) - 1
    
    for i in range(n, 1, -1):
        Array[1], Array[i] = Array[i], Array[1]
        heap_ajt(Array, 1, i-1)
    Array.pop(0)
#我认为该排序方式是稳定的
#from array1 to array2, they are different
#low <= mid < mid+1 <= high
#[low to mid], [mid+1 to high] 已有序


def MergeSort(arraya, low, high):
    if low == high:
        return
    mid = (low + high)// 2
    MergeSort(arraya, low, mid )
    MergeSort(arraya,mid+1,high)
    
    temp = [0 for i in range(high + 1)]
    Merge(arraya, low, mid, high, temp)
    arraya[low:high+1] = temp[low:high+1]

def Merge(array1, low, mid, high, array2):
    i = low
    j = mid + 1
    k = low
    while i <= mid and j <= high:
        if array1[i] <= array1[j] :
            array2[k] = array1[i]
            i += 1
        else:
            array2[k] = array1[j]
            j += 1
        k += 1
    while i <= mid:
        array2[k] = array1[i]
        i += 1
        k += 1
    while j <= high:
        array2[k] = array1[j]
        j += 1
        k += 1
def QKPass(array, low, high):
    if low == high:
        return low
    else:
        x = array[low]
        while low < high:
            while low < high and array[high] >= x:
                high -= 1
            #2 possibilities; 1)low == high 2)low < high and array[high] < x
            array[low] = array[high]
            while low < high and array[low] < x:
                low += 1
            array[high] = array[low]
        array[low] = x
        return low

def QuickSort(array, low, high):
    if low >= high:
        return
    r = QKPass(array, low, high)
    QuickSort(array, low, r-1)
    QuickSort(array, r+1, high)
def ShellInsert(sequence, delta):
    sequence.insert(0, -1)
    for i in range(1+delta, len(sequence)):
        x = sequence[0] = sequence[i]
        j = i - delta
        while j > 0 and sequence[j] > x:
            sequence[j+delta] = sequence[j]
            j -= delta
        sequence[j+delta] = x
    sequence.pop(0)

def ShellSort(sequence):
    delta = 4
    while delta != 0:
        ShellInsert(sequence, delta)
        delta //= 2

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:58:26  更:2022-03-15 23:04:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 17:51:34-

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