冒泡排序

冒泡排序是一种简单排序算法,需要重复的走访要排序的数列,每次比较相邻的数据,如果顺序错误就把他们进行交换。

算法

  • 比较相邻的元素。如果前一个比后一个大,就交换它们两个;
  • 对相邻元素做如上处理,从第一对到最后一对,这样最大的数在最后;
  • 针对所有的元素重复以上的步骤,除了最后一个;
  • 重复步骤一到三直到排序完成。

代码实现

#/usr/bin/python
#冒泡排序
def maopao_sort(arr):
    n = len(arr)
    for i in range(0, n-1):
        for j in range(0, n-1-i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr
arr = [24,1,3,5,6,44,22]
print(maopao_sort(arr))

选择排序

选择排序是一种简单直观排序算法。工作原理为先在无序序列找到最小(大)元素放到有序序列起始位置,再在无序序列找到最小(大)元素放到有序序列末尾位置,以此类推完成所有排序。

算法

  • 起始为无序序列R[1…n],有序为无;
  • 从i趟开始,有序序列,无序序列为R[1…i-1],R[i…n],从无序序列中找到最小(大)元素R[k]替换无序序列第一个元素,这样最小(最大)元素放到第i个位置,有序序列,无序序列变为R[1… i],无序序列R[i+1…n];
  • 进行n-1次操作实现排序。
  • 无论多少数据都是O(n2)的时间复杂度,适合比较小数据规模

代码实现

#/usr/bin/python
#选择排序
def xuanze_sort(arr):
    n = len(arr)
    min_index = 0
    for i in range(0, n-1):
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j  #存储最小元素的索引
        arr[i], arr[min_index] =  arr[min_index], arr[i] #最小元素放到有序序列末尾
    return arr

插入排序

插入排序是一种简单直观排序算法。工作原理为构建有序序列,对未排序序列插入有序序列相应的位置。

算法

  • 第一个元素作为有序序列
  • 取出下一个元素作为新元素,把有序序列从后向前扫描;
  • 新元素与有序序列比较如果有序序列的元素大于新元素,把有序序列该元素后移一位
  • 直到有序序列的元素小于等于新元素,把新元素插入有序序列元素后面。
  • 重复2到4步骤,直到序列排序完成。

代码实现

#/usr/bin/python
#插入排序
def charu_sort(arr):
    n = len(arr)
    min_index = 0
    for i in range(0, n-1):
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j  #存储最小元素的索引
        arr[i], arr[min_index] =  arr[min_index], arr[i] #最小元素放到有序序列末尾
    return arr