排序算法——直接插入排序
Posted shujuxiong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法——直接插入排序相关的知识,希望对你有一定的参考价值。
C语言代码实现:
/******************************************************* * Description: 直接插入排序算法 * Author: shujuxiong * Version: 1.0 * Time: 2018-06-19 * Copyright: *******************************************************/ #include<stdio.h> //函数:打印数组 void PrintDataArray(int a[], int n) { for(int i=0; i<n; i++) printf("%d, ",a[i]); printf(" "); } //函数:交换数组元素 void swap(int *x, int *y) { int temp; temp=*x; *x=*y; *y=temp; } //直接插入排序,版本1 void InsertSort1(int a[], int n) { int i,j,k; for(i=1; i<n; i++) { //找到要插入的位置 for(j=0; j<i; j++) { if(a[j]<a[i]) continue; //插入并后移剩余元素,后移元素的操作类似于冒泡排序 if(i != j) { int temp=a[i]; for(k = i-1; k>=j; k--) a[k+1] = a[k]; a[j] = temp; } } } PrintDataArray(a, n); } //直接插入排序,版本2,搜索和后移同时进行 void InsertSort2(int a[], int n) { int i,j,k; for(i=1; i<n; i++) { if(a[i]<a[i-1]) { //插入并后移剩余元素 int temp = a[i]; for(j=i-1; j>=0 && a[j]>temp; j--) { a[j+1] = a[j]; } a[j+1] = temp; } } PrintDataArray(a, n); } //插入排序,版本3:用数据交换代替版本2的数据后移(比较对象只考虑两个元素),像冒泡排序? //算法4中使用该方法 void InsertSort3(int a[], int n) { for(int i=1; i<n; i++) for(int j=i-1; j>=0 && a[j+1]<a[j];j--) { swap(&a[j+1], &a[j]); } PrintDataArray(a, n); } //测试用例 int main() { int a[] = {3,1,7,5,2,4,9,6}; int len = sizeof(a)/sizeof(a[0]); InsertSort1(a, len); InsertSort2(a, len); InsertSort3(a, len); return 0; }
运行结果:
Python 代码实现:
#!/usr/bin/python # -*- coding: utf-8 -*- ##直接插入排序,版本1,最简单方式 def insertSort1(relist): len_ = len(relist) for i in range(1,len_): for j in range(i): if relist[i] < relist[j]: relist.insert(j,relist[i]) # 首先碰到第一个比自己大的数字,赶紧刹车,停在那,所以选择insert relist.pop(i+1) # 因为前面的insert操作,所以后面位数+1,这个位置的数已经insert到前面去了,所以pop弹出 break return relist ##直接插入排序,版本2 def InsertSort2(myList): length = len(myList) for i in range(1,length): j = i - 1 #如果当前值小于前一个元素,则将当前值作为一个临时变量存储,将前一个元素后移一位 if(myList[i] < myList[j]): temp = myList[i] myList[i] = myList[j] #继续往前寻找,如果有比临时变量大的数字,则后移一位,直到找到比临时变量小的元素或者达到列表第一个元素 j = j-1 while j>=0 and myList[j] > temp: myList[j+1] = myList[j] j = j-1 #将临时变量赋值给合适位置 myList[j+1] = temp #测试用例 def main(): myList = [49,38,65,97,76,13,27,49] sortedlist=insertSort1(myList) print(sortedlist) if __name__ == ‘__main__‘: main()
运行结果:
以上是关于排序算法——直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章