python实现排序算法(一)——插入排序算法

 1 ‘‘‘
 2 插入排序算法
 3 原始数据data
 4 排序数据后数据SortedData,默认是从小打大排序
 5
 6 1.从data第一个元素开始,该元素赋值给SortedData[0],可以认为SortedData已经被排序
 7
 8 2.取出data的一个元素data[i],
 9     (1)从左到右扫描SortedData,
10         如果data[i]小于SortedData的某个元素SD,那么将data[i]插入SD的位置,选取下一个元素
11     (1)如果data[i]大于SortedData最后一个元素,将data[1]插入到SortedData的末尾,选取下一个元素
12
13 3.重复步骤2
14 ‘‘‘
15
16 #/usr/bin/env python
17 #coding:utf-8
18 #__author__= “livermorium116”
19
20
21 import random
22 import time
23 class InsertionSorted():
24     def __init__(self):
25         self.data=self.dataRand()
26
27         self.SortedData=[self.data[0]]#默认获得第1个元素,
28         print(‘排序前:‘)
29         print(‘__________________‘)
30         self.SortedByInsertion()
31
32     def SortedByInsertion(self):
33         TimeCount=time.time() ##程序计时
34         TimeCountCPU=time.clock()##CPU计时
35
36         for D in self.data[1:]: ##从余下的元素选取
37             for SD in self.SortedData: ##选取已排序元素中的一个SD
38                     if D < SD:
39                         tem=self.SortedData.index(SD)
40                         self.SortedData.insert(tem,D)
41                         print(self.SortedData)
42                         break
43                         选取下一元素
44
45             if D >= self.SortedData[-1]: ##比较最后一个元素
46                 self.SortedData.append(D)
47                 print(self.SortedData)
48                 continue
49
50
51         TimeCountCPU=time.clock()-TimeCountCPU
52         TimeCount=time.time()-TimeCount
53
54         print(‘排序后:\n‘)
55         print(self.SortedData)
56         print("总排序用时%4f\nCPU用时%4f\n"%(TimeCount,TimeCountCPU))
57     def dataRand(self):
58         temp=[]
59         for i in range(10):
60             temp.append(random.randint(1,100))
61         print(temp)
62         print("_____________")
63         return temp
64
65
66 if __name__ =="__main__":
67
68     IS=InsertionSorted()
69
70         
时间: 2025-01-11 21:40:57

python实现排序算法(一)——插入排序算法的相关文章

[数据结构和算法]折半插入排序算法笔记

/// <summary> /// 步骤: /// 1.记录当前待排元素 /// 2.标记顺序表有序查找区域下界和上界 /// 3.在顺序表有序查找区域中折半查找等待排序元素的位置 /// 4.把顺序表有序查找区域的某些元素后移一位,以空出位置给等待排序的元素 /// 5.在空出的位置填写当前排序元素 /// </summary> /// <param name="elements"></param> static void SqList

数据结构之排序算法Java实现(6)—— 插入类排序之折半插入排序算法

折半插入排序是对直接插入排序进行了改进,在寻找插入点时使用二分查找算法,提高了查询效率. 升序排序: /** * 折半插入排序 * 升序排序 */ @Override public <T extends Comparable<? super T>> void sortByAsc(T[] data) { for(int i = 1;i < data.length;i++ ){ if(data[i].compareTo(data[i - 1]) < 0){ /**记录i的值

java 算法之插入排序算法

这算是经典算法了,网上很多朋友都写了,有的我看不懂,所以我自己按照我自己所理解的写出来, 我觉得只有自己写出来的东西才是自己的 主要思路: 1.将数组的前两个数进行大小排序 2.将第三个数与前两个数进行比较,将第三个数插入到合适的位置 3.循环 其实这样来将对于新手来说,将其变成代码是有点困难的. 我也是.我很笨,没办法,只有将详细的一步一步写出来 // 数组 [3,5,1,2,8,9] 如有这样一个数组,按照上面的思路,我们从第二个数开始,就是5,5要跟3比较,第二个位置就是5要插入的位置 [

算法之-归并排序算法,插入排序算法

一.归并排序法 归并排序是效率还是比較高的算法.当中的分治法是经常使用的一种解决这个问题的方法,如今流行的云计算事实上就是一种分治法的应用. 所谓的分治法,字面解释就是"分而治之",就是把一个复杂的问题分成两个或很多其它的同样或相似的子问题,直到最后子问题能够简单的直接求解.原问题的解即子问题的解的合并.这个思想在实际工作中的作用很大,特别是处理大数据和做复杂运算的时候. 归并排序的基础是归并操作merge,即将两个有序数组合并为一个有序数组. 归并排序的算法思路为: 第一次扫描数组,

经典算法复习-插入排序算法

温习<数据结构C语言版>,看到排序算法,感觉看不懂. 写到代码实现下,花费了很久才搞出来. 实现的跟书本上的有点不一样哦,不喜勿喷. 参考文章: http://blog.csdn.net/hguisu/article/details/7776068 #include <stdio.h> #include <stdlib.h> int main() { printf("---------insert sort algorithm------------\n\n&

【数据结果与算法】插入排序算法

java语言实现 void insertionSort(int[] A) { for(int i=1;i<A.length;i++) { int value=a[i]; int j=i-1; while(a[j]>value&&j>=0) { a[j+1]=a[j]; j--; } a[j]=value; } }

【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/20043459   前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃了这个念头,斟前酌后,还是觉得分开来写比较好,具体原因,看完本篇博文也就自然明了了. 本篇文章主要探讨插入排序和希尔排序,之所将二者放在一起,很明显,是因为希尔排序是建立在插入排序的基础之上的.     注:以下各排序算法的N种实现方法大部分都是我根据算法思想,自己写出来的,或者是参考其本身的经典实

Python 实现排序算法

排序算法 下面算法均是使用Python实现: 插入排序 原理:循环一次就移动一次元素到数组中正确的位置,通常使用在长度较小的数组的情况以及作为其它复杂排序算法的一部分,比如mergesort或quicksort.时间复杂度为 O(n2) . # 1nd: 两两交换 def insertion_sort(arr): for i in range(1, len(arr)): j = i while j >= 0 and arr[j-1] > arr[j]: arr[j], arr[j-1] = a

排序算法系列——插入排序

记录学习点滴,菜鸟成长记 接触算法是研究生期间做项目时,需要编写一些诸如GA.QGA的时候,第一次使用“排序”还是用的Java自带的Comparator接口.后来买了<算法导论>来看,发现果然所有知识都是有专业壁垒的,简单的一个问题尽然蕴藏着如此多的思想,发现此简直欣喜无比,遂决定要好好研究研究.只有深入后才发现,原来算法的不仅仅是按照逻辑顺序写个程序那么简单,好的算法要考虑到方方面面,最简单的时间复杂度就够我学习很长时间了. 将自己学习排序算法的一些理解和感悟记录于此,方便自己温故而知新.