一、快速排序(C源码)

#include <stdlib.h>
#include <stdio.h> int adjust(int a[],int start,int end)
{
int i=start;
int j=end;
int temp=a[start];
while(i<j)
{
while(i<j&&temp<a[j])
j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j&&temp>=a[i])
i++;
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=temp;
return i;
} void print_array(int array[], int n)
{
int i;
for( i = ; i < n ; ++i )
printf("%d ", array[i]);
printf("\n");
} void quiksort(int a[],int start,int end)
{
if(start<end)
{
int m=adjust(a,start,end);
quiksort(a,start,m-);
quiksort(a,m+,end);
}
} int main()
{
int array[] = {, , , , , ,};
quiksort(array, , );
print_array(array, );
system("pause");
return ;
}

二、堆排序

#include <stdlib.h>
#include <stdio.h> //最大堆的调整函数
//注意a[0]不参与排序
void adjust(int a[],int s,int m)
{
int temp=a[s];
int j;
for(j=*s;j<=m;j=*j)
{
if(j<m&&a[j]<a[j+])
j++;
if(temp>a[j])
break;
a[s]=a[j];
s=j;
}
a[s]=temp;
} //堆排序函数
void heapsort(int a[],int n)
{
int i;
int temp;
for(i=n/;i>=;i--)
adjust(a,i,n);
for(i=n;i>;i--)
{
temp=a[];
a[]=a[i];
a[i]=temp;
adjust(a,,i-);
}
} void print_array(int array[], int n)
{
int i;
for( i = ; i < n ; ++i )
printf("%d ", array[i]);
printf("\n");
} int main()
{
int array[] = {-,, , , , , ,};
heapsort(array,);
print_array(array, );
system("pause");
return ;
}

三、 二路归并排序

#include <stdlib.h>
#include <stdio.h> //合并相邻的两个有序组
//a[u,...,v-1]和a[v,...,t]
void merge(int a[],int b[],int u,int v,int t)
{
int i,j,k;
i=u;
j=v;
k=u;
while(i<=v-&&j<=t)
{
if(a[i]<=a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<=v-)
{
b[k++]=a[i++];
}
while(j<=t)
{
b[k++]=a[j++];
}
} void onepass(int a[],int b[],int s,int n)
{
int u,v,t;
u=;
v=s;
t=*s-;
while(n-u>=*s)
{
merge(a,b,u,v,t);
u+=*s;
v+=*s;
t+=*s;
}
if(n-u>s)
merge(a,b,u,v,n-);
else
{
for(;u<n;u++)
b[u]=a[u];
}
} void mergesort(int a[],int n)
{
int s=;
int i;
int *b=(int*)malloc(n*sizeof(int));
while(s<n)
{
onepass(a,b,s,n);
s=*s;
if(s>=n)
{
for(i=;i<n;i++)
a[i]=b[i];
}
else
{
onepass(b,a,s,n);
s=*s;
}
}
free(b);
}
void print_array(int array[], int n)
{
int i;
for( i = ; i < n ; ++i )
printf("%d ", array[i]);
printf("\n");
} int main()
{
int array[] = {-,,,,,,,,};
mergesort(array,);
print_array(array, );
system("pause");
return ;
}

二路归并排序(2)

#include <stdlib.h>
#include <stdio.h> //合并相邻的两个有序组
//a[u,...,v-1]和a[v,...,t]
void merge(int a[],int b[],int u,int v,int t)
{
int i,j,k;
i=u;
j=v;
k=u;
while(i<=v-&&j<=t)
{
if(a[i]<=a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<=v-)
{
b[k++]=a[i++];
}
while(j<=t)
{
b[k++]=a[j++];
}
} void onepass(int a[],int b[],int s,int n)
{
int u,v,t;
u=;
v=s;
t=*s-;
while(n-u>=*s)
{
merge(a,b,u,v,t);
u+=*s;
v+=*s;
t+=*s;
}
if(n-u>s)
merge(a,b,u,v,n-);
else
{
for(;u<n;u++)
b[u]=a[u];
}
} void mergesort(int a[],int n)
{
int s;
int i;
int *b=(int*)malloc(n*sizeof(int));
for(s=;s<n;s=*s)
{
onepass(a,b,s,n);
s=*s;
if(s>=n)
{
for(i=;i<n;i++)
a[i]=b[i];
}
else
onepass(b,a,s,n);
}
}
void print_array(int array[], int n)
{
int i;
for( i = ; i < n ; ++i )
printf("%d ", array[i]);
printf("\n");
} int main()
{
int array[] = {-,,,,,,,,};
mergesort(array,);
print_array(array, );
system("pause");
return ;
}

四、冒泡排序

#include <stdlib.h>
#include <stdio.h> void bubblesort(int a[],int n)
{
int i,j;
int chage=;
int temp;
for(i=n-;chage&&i>;i--)
{
chage=;
for(j=;j<i;j++)
{
if(a[j]>a[j+])
{
temp=a[j];
a[j]=a[j+];
a[j+]=temp;
chage=;
}
}
}
} void print_array(int array[], int n)
{
int i;
for( i = ; i < n ; ++i )
printf("%d ", array[i]);
printf("\n");
} int main()
{
int array[] = {-,,,,,,,,};
bubblesort(array,);
print_array(array, );
system("pause");
return ;
}

五、直接选择排序

#include <stdlib.h>
#include <stdio.h> void selectsort(int a[],int n)
{
int i,j;
int k,max; //记录最大值下标和最大值
for(i=n-;i>=;i--)
{
k=i;
max=a[i];
for(j=;j<i;j++)
{
if(a[j]>max)
{
max=a[j];
k=j;
}
}
a[k]=a[i];
a[i]=max;
}
} void print_array(int array[], int n)
{
int i;
for( i = ; i < n ; ++i )
printf("%d ", array[i]);
printf("\n");
} int main()
{
int array[] = {-,,,,,,,,};
selectsort(array,);
print_array(array, );
system("pause");
return ;
}

排序小结(C版)的更多相关文章

  1. 排序小结(C++版)

    一.快速排序 #include <iostream> using namespace std; int adjust(int a[],int start,int end) { int i, ...

  2. 排序小结(java版)

    一.归并排序 package org.lxh.demo08.b; class Sort { private int[] a; private int n; Sort(int n) { a=new in ...

  3. iOS可视化动态绘制八种排序过程(Swift版)

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  4. 排序算法系列:选择排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)

    在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 我总结一个清晰不罗嗦版: 原理: 从数组头元素索引i开始,寻找后面最小的值(比i位 ...

  5. 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

    常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...

  6. 常用排序算法--java版

    package com.whw.sortPractice; import java.util.Arrays; public class Sort { /** * 遍历一个数组 * @param sor ...

  7. 秒杀9种排序算法(JavaScript版)

    一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...

  8. Qt之QHeaderView自定义排序(终极版)

    简述 本节主要解决自定义排序衍生的第二个问题-将整形显示为字符串,而排序依然正常. 下面我们介绍三种方案: 委托绘制 用户数据 辅助列 很多人也许会有疑虑,平时都用delegate来绘制各种按钮.图标 ...

  9. 常见的链表排序(Java版)

    上篇博客中讲解了九大内部排序算法,部分算法还提供了代码实现,但是那些代码实现都是基于数组进行排序的,本篇博客就以链表排序实现几种常见的排序算法,以飨读者. 快速排序的链表实现 算法思想:对于一个链表, ...

随机推荐

  1. 生产者-消费者问题【Java实现】

     生产者-消费者问题是经典的并发问题, 非常适合并发入门的编程练习.  生产者-消费者问题是指, 有若干个生产者和若干个消费者并发地读写一个或多个共享存储空间:生产者创建对象并放入到共享存储空间,消费 ...

  2. "未能找到类型或命名空间名称",引用dll的时候出错

    当前项目是.net2.0框架,引用的dll是 .net 4.5框架,引用后编译时报错“未能找到类型或命名空间名称”. 当前项目 右键-->应用程序-->目标框架 改为 .net frame ...

  3. php + Bootstrap-v3-Typeahead 自动完成组件的使用

    Bootstrap 中的 Typeahead 组件就是通常所说的自动完成 AutoComplete,类似百度.谷歌等搜索提示:输入关键词出现相应的下拉列表数据. 是Bootstrap-3-Typeah ...

  4. Java菜鸟培训第二天

    HTML——超文本标记语言…………… 静态网页:不需要访问数据库. 动态网页:在网上发布的好的,我们能通过网络浏览到的都是动态的,需要访问数据库. <html>--开始标签 <hea ...

  5. JQ的live(),on(),deletage(),bind()几个的区别

    今天在网上看到一篇文章,关于JQ里面事件绑定的区别,说说我自己看后的理解,本人菜鸟一枚,很多东西不懂 ,有理解错误的还望大神们多多指教 bind()方法是绑定事件最直接的方法,这个方法是绑定到docu ...

  6. 2015年江西理工大学C语言程序设计竞赛(高级组)

    A 解法:DP+二分 dp[i]=max(dp[i],dp[j]+p[i].v)(i>j) dp[i]表示建立i点之后能够获得的最大值 int n,M; struct node { int l, ...

  7. python之redis

    Redis简单介绍 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构 ...

  8. Chrome浏览器快捷键大全(新加了其他一些浏览器的独有)

    官方快捷键文档: https://support.google.com/chrome/answer/157179?hl=zh-Hans&ref_topic=14676   浏览器标签页和窗口快 ...

  9. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序使用异步及存储过程

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第九篇:为ASP.NET MVC应用程序 ...

  10. abort终止正在进行中的的ajax请求

    核心:调用XMLHttpRequest对象上的abort方法 jQuery的ajax方法有自己的超时时间设置参数:   $.ajax({type:'POST', url:'b.php', data:' ...