博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法
阅读量:6250 次
发布时间:2019-06-22

本文共 1656 字,大约阅读时间需要 5 分钟。

稳定性:

注:相等元素不交换

稳定:冒泡、插入、归并、基数

不稳定:选择、快速、堆、希尔

实现:

希尔排序:

1 void shellSort(int v[],int n) 2 { 3     int gap,i,j,tmp; 4     for(gap=n/2;gap>0;gap/=2) 5     { 6         for(i=gap;i
=0 && v[j]>v[j+gap];j-=gap) 9 {10 tmp=v[j];11 v[j]=v[j+gap];12 v[j+gap]=tmp;13 }14 }15 }16 }

 快速排序:

(这里提供四个实现,前两个实现以首元素为枢纽元,后两个实现可以指定枢纽元的位置,前两个实现可以看做是后两个实现的特例)

1 void swap(int *a,int *b)  2 {  3     int tmp=*a;  4     *a=*b;  5     *b=tmp;  6 }  7 void quickSort1(int a[],int s,int e)//第一个元素作为枢纽元   8 {  9     if(s>=e) return; 10     int i=s+1; 11     int j=e; 12     while(1) 13     { 14         //若用do while循环,则  初始i=s;j=t+1;   do{i++;}while(!(a[i]>=a[s] || i==t));   do{j--;}while(!(a[j]<=a[s] || j==s)); 15         while(i
s && a[j]>a[s])//或j>=s也可 20 { 21 j--; 22 } 23 24 if(i
=e) return; 40 int i=s; 41 int j=s; 42 while(++i <= e) 43 { 44 if(a[i]
=e) return; 56 57 int pivot=(s+e)/2;//指定枢纽元 58 59 int i=s; 60 int j=e; 61 while(1) 62 { 63 //若用do while循环,则 初始i=s-1;j=t+1; do{i++;}while(!(a[i]>=a[pivot] || i==t)); do{j--;}while(!(a[j]<=a[pivot] || j==s)); 64 while(i
s && a[j]>a[pivot])//或j>=s也可 69 { 70 j--; 71 } 72 73 if(i
=e) return; 92 93 int pivot=(s+e)/2;//指定枢纽元 94 95 int i=s-1; 96 int j=s-1; 97 while(++i <= e) 98 { 99 if(a[i]
View Code

 

转载地址:http://stria.baihongyu.com/

你可能感兴趣的文章
System Security Services Daemon(SSSD)系统安全服务守护进程
查看>>
遭遇jar包冲突
查看>>
Linux 用命令把同一个用户加入多个组
查看>>
linux修改swap虚拟内存大小
查看>>
Oracle数据库巡检
查看>>
Linux centos的tmpfs文件系统
查看>>
Centos7升级安装openssh7.5(也适用于centos6系统)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
【scala初学】scala 控制 for while match if
查看>>
Oracle子查询和多表查询
查看>>
linux mint系统下编程相关环境配置
查看>>
2016年3月9日作业
查看>>
linux系统双网卡绑定及丢包问题
查看>>
Python-opencv实现Data Augmentation
查看>>
系统算法学习总结
查看>>
rsync服务的基本部署
查看>>
CentOs 7 搭建DHCP服务器 启动报错
查看>>
IT人的学习方法论-3,讨论学习的方法
查看>>
yum 出现Existing lock /var/run/yum.pid: another copy is running as pid:3355
查看>>