常用的排序算法
2015-11-26 14:23
387 查看
//冒泡排序
void bubble(int []a){
BOOL exchanged=
YES;
for (int i=0; i<a.length-1&&exchanged; i++)
{
exchanged=NO;
for (int j=0; j<(a.length-1-i); j++)
{
int aj =a[j];
int aj1 = a[j+1];
if (aj>aj1)
{
exchanged=YES;
a[j+1]=aj;
a[j]=aj1;
}
}
}
}
//选择排序
void select(int [] a ){
for (int i=
0; i<a.length; i++)
{
for (int j=i ; j<a.length; j++)
{
int ai=a[i];
int aj = a[j];
if (a[i]>a[j]) {
a[i]=aj;
a[j]=ai;
}
}
}
}
//插入排序
void insert (int [] a){
for (int i =1; i<a.length; i++)
{
int ai = a[i],aj;
int j=i;
while (j>0&&(aj=a[j-1])>ai)
{
a[j]=ai;
j--;
}
a[j]=ai;
}
}
//快速排序
void quick(int [] a,int left,int right){
if (left<right)
{
int key=a[left];
int low = left;
int high = right;
while (low<high) {
while (low<high && a[high]>=key) {
high--;
}
a[low]=a[high];
while (low<high && a[low]<=key) {
low++;
}
a[high]=a[low];
}
a[low]=key ;
quick(a,left,low-1);
quick(a,low+1,right);
}
}
//汉诺塔算法
void hanoi(int i,char A,char B,char
C){
if (i==1)
{
move(i,A,C);
}else
{
hanoi(i-1,A,C,B);
move(i,A,C);
hanoi(i-1,B,A,C);
}
}
void move(int i,char x ,char y){
printf("Move disk i from x to y");
}
void bubble(int []a){
BOOL exchanged=
YES;
for (int i=0; i<a.length-1&&exchanged; i++)
{
exchanged=NO;
for (int j=0; j<(a.length-1-i); j++)
{
int aj =a[j];
int aj1 = a[j+1];
if (aj>aj1)
{
exchanged=YES;
a[j+1]=aj;
a[j]=aj1;
}
}
}
}
//选择排序
void select(int [] a ){
for (int i=
0; i<a.length; i++)
{
for (int j=i ; j<a.length; j++)
{
int ai=a[i];
int aj = a[j];
if (a[i]>a[j]) {
a[i]=aj;
a[j]=ai;
}
}
}
}
//插入排序
void insert (int [] a){
for (int i =1; i<a.length; i++)
{
int ai = a[i],aj;
int j=i;
while (j>0&&(aj=a[j-1])>ai)
{
a[j]=ai;
j--;
}
a[j]=ai;
}
}
//快速排序
void quick(int [] a,int left,int right){
if (left<right)
{
int key=a[left];
int low = left;
int high = right;
while (low<high) {
while (low<high && a[high]>=key) {
high--;
}
a[low]=a[high];
while (low<high && a[low]<=key) {
low++;
}
a[high]=a[low];
}
a[low]=key ;
quick(a,left,low-1);
quick(a,low+1,right);
}
}
//汉诺塔算法
void hanoi(int i,char A,char B,char
C){
if (i==1)
{
move(i,A,C);
}else
{
hanoi(i-1,A,C,B);
move(i,A,C);
hanoi(i-1,B,A,C);
}
}
void move(int i,char x ,char y){
printf("Move disk i from x to y");
}
相关文章推荐
- 你知道bat是什么意思吗?
- [AlwaysOn Availability Groups] 健康模型 Part 2 ——扩展
- Swift线程安全详解-概念,三种锁,死锁,Atomic,synchronized
- Java封装例题
- 【leetcode】【162】Find Peak Element
- jdbc连接数据库的步骤
- mysql -权限解决办法
- 使用开源框架 Glide 加载与缓存图片
- [Android]startActivityForResult启动singleTask的Activity,则onActivitResult()立即回调且resultCode为RESULT_CANCEL
- JSP 九个隐含JSP对象
- 单片机基础知识网址
- ajax+jsp实现三级联动下拉框
- GEF中连接的实现
- jQuery方法注意事项
- spark RDD系列------2.HadoopRDD分区的创建以及计算
- 组合问题的递归方式解决
- [ 教程 ] 小米4 MI4 cancro 刷完win10预览版后回到MIUI
- 拷贝构造、赋值构造、深拷贝、浅拷贝、位拷贝、值拷贝
- IOS,objective_C中用@interface和 @property 方式声明变量的区别
- ObjectiveC中的block用法解析