随笔分类 - 排序算法
摘要:python 二分查找算法 楔子 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] 你说,so easy! l.index(66
阅读全文
摘要:# 基数排序有着局限性,只能是整数,# 排序的时候要先排后面一个条件的(多条件排序)#如本例中,先从个位开始排起# 多关键字排序# 从低关键字开始排序 # @File: radix_sort ############################################## # def get_digit(num, i): # 获取整数第i位数字 # # return n...
阅读全文
摘要:计数排序有局限性,最小值和最大值决定着数组的长度,如果分配均匀的话可以用 # @File: count_sort import random def count_sort(li, max_num=100): count = [0 for i in range(max_num + 1)] for val in li: count[val] += 1 l...
阅读全文
摘要:与插入排序的思想一致,插入排序是一个,希尔排序是多个插入排序! # @File: shell_sort import random def insert_sort_gap(li, d): for i in range(d, len(li)): j = i - d temp = li[i] while j >= 0 and li[j] ...
阅读全文
摘要:# 构建小顶堆跳转def sift(li, low, higt): tmp = li[low] i = low j = 2 * i + 1 while j li[j]: li[i] = li[j] i = j j = 2 * i + 1 else: ...
阅读全文
摘要:import random from timewrap import cal_time # 一个计算时间的装饰器 def merge(li, low, mid, high): i = low j = mid + 1 li_tmp = [] while i <= mid and j <= high: if li[i] <= li[j]: ...
阅读全文
摘要:归并排序也是一种常用的排序算法, 其时间复杂度为O(n*logn), 它的基础是分治的思想。 其基本思路就是把数组分成两组A,B, 如果这两组内的数据都是有序的, 那么就可以很方便的对这两组数据进行合并排序。 但是如何让这两组数据有序呢? 归并法的思想就是把A,B两组各自再分成两组, 依次类推, 当分出来的小组数据只有一个的时候, 即可以认为小组数据已经达到了有序。 然和合并相邻的两个小组就OK...
阅读全文
摘要:#堆排序升序: #include #include #include using namespace std; #define parent(i) (i)/2 #define left(i) 2*(i) #define right(i) 2*(i)+1 int size; void heapify(int a[], int i) { int l = left(i), r = ...
阅读全文
摘要:#include int a[101],n;//定义全局变量,这两个变量需要在子函数中使用 void quicksort(int left,int right) { int i,j,t,temp; if(left>right) return; temp=a[left]; //temp中存的就是基准数 i=left; j=righ...
阅读全文
摘要:#include #include "cstring" #include "string" using namespace std; const int L=10000; int main(){ int i,n,a[L],num[L+1],Size; int T; cin>>T; while (T--) { cin>>n; ...
阅读全文
摘要:from random import Random def quick_sort(arr): if len(arr) > 1: qsort(arr, 0, len(arr) - 1) def qsort(arr, start, end): base = arr[start] pl = start pr = end whi...
阅读全文
摘要:l = [1, 4, 5, 2, 9, 7, 3] for i in range(len(l)-1): for j in range(len(l)-1-i): #我们每循环一次都会将最大的数推到最右边,所以需要将最右边排好的数拿走 if l[j] > l[j+1]:#前一个数与后一个数依次比较,直到将最大的数推到右边 l[j], l[j+1] = ...
阅读全文
摘要:list_1 = [] #先建一个空链表 print('输入排序个数:') n = int(input()) #接收输入个数 for i in range(n): a = input() list_1.append(a) #将这n个数都存入链表 Lenth = len(list_1) for i in range(Lenth - 1): Min = ...
阅读全文
摘要:import randomdef insert_sort(li): for i in range(1, len(li)): j = i - 1 tmp = li[i] while j >= 0 and li[j] > tmp: li[j+1] = li[j] j -= 1 li...
阅读全文