예제 #1
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/1/31 5:06 下午
# @Author  : zhangronghui
# @File    : 1.bubblesort.py
# @Software: PyCharm
import pretty_errors

from common import swap, sortAndAssert
'''
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
'''


def bubbleSort(a):
    pass


if __name__ == '__main__':
    sortAndAssert(bubbleSort)
예제 #2
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pretty_errors
from common import swap, sortAndAssert


def partition(a, left, right) -> int:
    # 3 2 5 6
    pass


def quickSort(a, left=None, right=None):
    pass


if __name__ == '__main__':
    sortAndAssert(quickSort)
예제 #3
0
    # 低效、错误的代码
    n = len(a)
    if n < 2:
        return a
    for i in range(1, n):
        for j in reversed(range(i)):
            if a[j] <= a[i]:
                break
            swap(a, i, j)
            i = j  # 记得更新 i,为的是把 i 插入正确的位置


def insertionSort2(a):
    n = len(a)
    if n < 2:
        return a
    for i in range(1, n):
        t = a[i]  # 暂存需要插入的值
        # 可能插在首位, 所以加上 -1
        for j in reversed(range(-1, i)):
            if j == -1 or a[j] <= t:
                a[j + 1] = t
                break
            a[j + 1] = a[j]


if __name__ == '__main__':
    sortAndAssert(insertionSort)
    sortAndAssert(insertionSort1)
    sortAndAssert(insertionSort2)
예제 #4
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pretty_errors

from common import swap, sortAndAssert
'''
1. 首先在未排序序列中找到最小元素,存放到排序序列的起始位置
2. 再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。
3. 重复第二步,直到所有元素均排序完毕。
'''

# range(10, 0, -1)   10, 9, ..., 0


def selectionSort(a):
    n = len(a)
    if n < 2:
        return a
    for i in range(n - 1):
        mi = i
        for j in range(i + 1, n):
            if a[j] < a[mi]:
                mi = j
        swap(a, i, mi)


if __name__ == '__main__':
    sortAndAssert(selectionSort)
예제 #5
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pretty_errors
from common import swap, sortAndAssert


def mergeSort(a):
    pass


if __name__ == '__main__':
    sortAndAssert(mergeSort)
예제 #6
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pretty_errors
from common import swap, sortAndAssert
'''
1. 选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;
2. 按增量序列个数 k,对序列进行 k 趟排序;
3. 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。
仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。


一个更好理解的希尔排序实现:
将数组列在一个表中并对列排序(用插入排序)。
重复这过程,不过每次用更长的列来进行。
最后整个表就只有一列
将数组转换至表是为了更好地理解这算法,算法本身仅仅对原数组进行排序
'''


def shellSort(a):
    pass


if __name__ == '__main__':
    sortAndAssert(shellSort)