• 简单排序


      1 # Author:Json
      2 
      3 class Sort(object):
      4     '''
      5     this class include bubble sort,insert sort,select sort,quick sort,merge sort and heap sort
      6     '''
      7 
      8     def __init__(self, li):
      9         self.li = li
     10 
     11     def bubble_sort(self):
     12         '''
     13         this function is bubble sort
     14         :return:
     15         '''
     16         for i in range(len(self.li) - 1):
     17             exchage = False
     18             for j in range(len(self.li) - i - 1):
     19                 if self.li[j] > self.li[j + 1]:
     20                     self.li[j], self.li[j + 1] = self.li[j + 1], self.li[j]
     21                     exchage = True
     22             if not exchage:
     23                 break
     24 
     25     def insert_sort(self):
     26         '''
     27         this function is insert sort
     28         :return:
     29         '''
     30         for i in range(1, len(self.li)):
     31             tmp = self.li[i]
     32             j = i - 1
     33             while j >= 0 and tmp < self.li[j]:
     34                 self.li[j + 1] = self.li[j]
     35                 j -= 1
     36             self.li[j + 1] = tmp
     37 
     38     def select_sort(self):
     39         '''
     40         this function is select sort
     41         :return:
     42         '''
     43         for i in range(len(self.li) - 1):
     44             min_loc = i
     45             for j in range(i + 1, len(self.li)):
     46                 if self.li[min_loc] > self.li[j]:
     47                     min_loc = j
     48             if min_loc != i:
     49                 self.li[min_loc], self.li[i] = self.li[i], self.li[min_loc]
     50 
     51     def quick_sort(self):
     52         '''
     53         this function include "quick_sort_" and "partion"
     54         "quick_sort_" is used in Recursive, "partition" used in parting
     55         :return:
     56         '''
     57         left = 0
     58         right = len(self.li) - 1
     59         self.__quick_sort(left, right)
     60 
     61     def __quick_sort(self, left, right):
     62         if left < right:
     63             mid = self.__partition(left, right)
     64             self.__quick_sort(left, mid)
     65             self.__quick_sort(mid + 1, right)
     66 
     67     def __partition(self, left, right):
     68         tmp = self.li[left]
     69         while left < right:
     70             while left < right and self.li[right] > tmp:
     71                 right -= 1
     72             self.li[left] = self.li[right]
     73             while left < right and self.li[left] < tmp:
     74                 left += 1
     75             self.li[right] = self.li[left]
     76         self.li[left] = tmp
     77         return left
     78 
     79     def merge_sort(self):
     80         '''
     81         this function include __merge_sort,__merge
     82         the effect of __merge_sort is breaking down the list
     83         the effect of __merge is merging the two ordered list to one ordered list
     84         :return:
     85         '''
     86         low = 0
     87         high = len(self.li) - 1
     88         self.__merge_sort(low, high)
     89 
     90     def __merge_sort(self, low, high):
     91         if low < high:
     92             mid = (low + high) // 2
     93             self.__merge_sort(low, mid)
     94             self.__merge_sort(mid + 1, high)
     95             self.__merge(low, mid, high)
     96 
     97     def __merge(self, low, mid, high):
     98         i = low
     99         j = mid + 1
    100         ltmp = []
    101         while i <= mid and j <= high:
    102             if self.li[i] < self.li[j]:
    103                 ltmp.append(self.li[i])
    104                 i += 1
    105             else:
    106                 ltmp.append(self.li[j])
    107                 j += 1
    108         while i <= mid:
    109             ltmp.append(self.li[i])
    110             i += 1
    111         while j <= high:
    112             ltmp.append(self.li[j])
    113             j += 1
    114         self.li[low:high + 1] = ltmp
    115 
    116     def heap_sort(self):
    117         n = len(self.li)
    118         for i in range(n//2-1,-1,-1):
    119             self.__sift(i,n-1)
    120         for j in range(n-1,-1,-1):
    121             self.li[0],self.li[j] = self.li[j],self.li[0]
    122             self.__sift(0,j-1)
    123 
    124     def __sift(self,low,high):
    125         i = low
    126         j = i * 2 + 1
    127         tmp = self.li[i]
    128         while j <= high:
    129             if j < high and self.li[j] < self.li[j+1]:
    130                 j += 1
    131             if tmp < self.li[j]:
    132                 self.li[i] = self.li[j]
    133                 i = j
    134                 j = i * 2 + 1
    135             else:
    136                 break
    137         self.li[i] = tmp
    138 
    139 
    140 
    141 
    142 def test_sort():
    143     import random
    144     li = []
    145     for i in range(1000):
    146         li.append(i)
    147     random.shuffle(li)
    148     a = Sort(li)
    149     a.heap_sort()
    150     print(li)
    151 
    152 
    153 test_sort()
  • 相关阅读:
    z-index坑
    一些常用的可以封装好的方法
    echarts线状图
    vue 用js复制内容
    Java并发系列
    ThreadLocal讲解
    TreeMap源码学习
    HashMap源码学习
    Java Socket编程
    socket、tcp、udp、http 的认识及区别
  • 原文地址:https://www.cnblogs.com/Json28/p/10419803.html
Copyright © 2020-2023  润新知