直接插入排序、希尔排序—C—Python
2017-09-01 19:56
337 查看
1、直接插入排序
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为 O(n^2),是稳定的排序方法,性能优于冒泡和简单选择排序
C实现
python 实现
2、希尔排序
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
思想:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的。
C实现
python 实现
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为 O(n^2),是稳定的排序方法,性能优于冒泡和简单选择排序
C实现
#include <stdio.h> int n, arr[100]; void insertSort(int * arr) { int i,j,key; for(i=2;i<=n;i++) { key=arr[i]; j=i-1; while(j>=0&&arr[j]>key) { arr[j+1]=arr[j]; j--; } arr[j+1]=key; } } int main(int argc,char * argv[]) { int i; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&arr[i]); insertSort(arr); for(i=1;i<=n;i++) printf("%d ",arr[i]); printf("\n"); return 0; }
python 实现
#直接插入排序 def insert_sort(lists): n=len(lists) for i in range(1,n): key=lists[i] j=i-1 while(j>=0 and lists[j]>key): lists[j+1]=lists[j] j-=1 lists[j+1]=key if __name__=='__main__': eles = input('intput elements:').strip().split() list = [int(ele) for ele in eles] insert_sort(list) print(list)
2、希尔排序
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。
思想:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的。
C实现
#include <stdio.h> void shellSort(int arr[],int n) { int i,j,step,key,k; for(step=n/2;step>0;step/=2) //分组,增量逐渐减小,即分组逐渐减少 { for(i=1;i<=step;i++) //分成的子组分别进行直接插入操作 for(j=step+i;j<=n;j+=step) { key=arr[j]; k=j-step; while(k>0&&arr[k]>key) { arr[k+step]=arr[k]; k-=step; } arr[k+step]=key; } } } int main() { int i,n, arr[100]; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&arr[i]); shellSort(arr,n); for(i=1;i<=n;i++) printf("%d ",arr[i]); printf("\n"); return 0; }
python 实现
def shell_sort(lists): n=len(lists) gap=n//2 while gap>0: for i in range(gap): for j in range(i+gap,n,gap): key = lists[j] k=j-gap while k>=0 and lists[k]>key: lists[k+gap]=lists[k] k-=gap lists[k+gap]=key gap//=2 return lists if __name__=='__main__': eles = input('intput elements:').strip().split() list = [int(ele) for ele in eles] list=shell_sort(list) print(list)
相关文章推荐
- python排序算法-冒泡排序,选择排序,直接插入排序,希尔排序,归并排序,快速排序,堆排序
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)
- 排序算法(二)、插入排序 —— 直接插入排序 和 希尔排序
- 直接插入排序(python)
- 排序算法总结(一)---- 直接插入排序,希尔排序(java实现)
- 数据结构学习10——直接插入排序与希尔排序
- 图解"数据结构--内部排序算法"----插入排序:直接插入排序、希尔排序
- 编程菜鸟的日记-初学尝试编程-整理内部排序(交换排序(冒泡排序和快速排序)、直接选择排序、直接插入排序,希尔排序)
- 排序(选择,冒泡,直接插入,希尔排序)
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 插入排序(直接插入排序,折半插入排序,2路插入排序,希尔排序)
- #排序算法#【2】直接插入排序、希尔排序
- 插入排序(直接插入排序,希尔排序)
- 程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现)
- 直接插入排序,折半插入排序,希尔排序
- 插入排序类:直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 数据结构的排序用直接插入、折半插入、希尔排序、快速排序
- java五种内部排序(直接插入排序、希尔排序、快速排序、堆排序、归并排序)
- 随机生成30个数,试比较直接插入排序、简单选择排序、冒泡排序、快速排序、堆排序和希尔排序的时空性能和稳定性。