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

  • 冒泡排序

原理:

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

"冒泡排序"
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))

 

 

posted @ 2019-07-09 18:13  非常人  阅读(299)  评论(0编辑  收藏  举报