C语言排序
排序算法
快速排序
C语言快速排序qsort(数组,长度,元素大小,cmp函数(*,*))//注意函数cmp的参数为指针
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h> //qsort函数
int cmp (int a,int b)
{
return a -b;
} //0 3 2 1 4 5 6 9 8 7
int main()
{
inta[10],i,x;
for(i=0;i<10; i++)
{
scanf("%d",&a[i]);
}
qsort(a,10,sizeof(a[0]),cmp);
for(i=0;i<10; i++)
{
printf("%d ",a[i]);
}
return 0;
}
自定义qsort void qsort2(int a[],int l,int r){
if(l<r){
inti=l,j=r;
intk=a[i];
while(i<j){
while(i<j&&a[j]>=k){
j--;
}
a[i]=a[j];
while(i<j&&a[i]<=k){
i++;
}
a[j]=a[i];
}
a[i]=k;
qsort2(a,l,i-1);
qsort2(a,i+1,r);
}
}
冒泡排序
void bubble(int a[],int n)
{
int i,j;
for(i=0;i<n-1; i++)
{
for(j=n-1; j>i; j--)
{
if(a[j]<a[j-1])
{
int t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}
}
}
归并排序
void merge(int a[],int l,int m,int r){
inttemp[r-l+1];
inti=l,j=m+1,k=0;
while(i<=m&&j<=r){
if(a[i]<a[j])temp[k++]=a[i++];
elsetemp[k++]=a[j++];
}
while(i<=m){
temp[k++]=a[i++];
}
while(j<=r){
temp[k++]=a[j++];
}
for(i=0;i<k;i++){
a[l+i]=temp[i];
}
}
void mergeSort(int a[],int l,int r){
if(l<r){
intm=(l+r)/2;
mergeSort(a,l,m);
mergeSort(a,m+1,r);
merge(a,l,m,r);
}
}
选择排序
void selectSort(int a[],int n){
int i,j;
for(i=0;i<n;i++){
intk=i;
for(j=i+1;j<n;j++){
if(a[j]>a[k]){
k=j;
}
if(k!=i){
int t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}
}
堆排序
#include <stdio.h>
#include <stdlib.h> typedef struct heap_t{
int *arr; //point for an array to store heap value.
intheapMaxIndex; //heap element max indexnumber
intarrLength; //array length of arr }Heap; void printArr(int *p, int size)
{
int i;
for(i=0;i<size;i++)
{
printf("%d",p[i]);
}
} void maxHeapify(Heap *hp, unsigned int nodei)
{
unsignedint l = (nodei+1) << 1 - 1; //leftchild = 2i-1, -1 ?:arr[0..n-1]
unsignedint r = (nodei+1) << 1 ; //right child = 2i
unsignedint largest = 0;
intheapMaxI = hp->heapMaxIndex; if(l<= heapMaxI && hp->arr[l] > hp->arr[nodei])
largest= l ;
else
largest= nodei ; if(r<= heapMaxI && hp->arr[r] > hp->arr[largest])
largest= r ; if(largest!=nodei)
{
//exchange
inttmp ;
tmp= hp->arr[largest];
hp->arr[largest]= hp->arr[nodei];
hp->arr[nodei]= tmp; maxHeapify(hp,largest);
}else{
return;
} } Heap *createHeap(int *arrp, int arrLength,Heap *heap)
{
int i;
heap->arr =arrp;
heap->heapMaxIndex = arrLength-1;
heap->arrLength = arrLength; //for an heapa[0..n-1]; a[(n/2)..n-1] all are leaves
for(i =arrLength>>1-1; i >=0; i--)
maxHeapify(heap,i);
return heap;
} void heapSort(Heap *hp)
{
int tmp;
int last;
while(hp->heapMaxIndex>0)
{
last= hp->heapMaxIndex ;
//exchange
tmp= hp->arr[last];
hp->arr[last]= hp->arr[0];
hp->arr[0]= tmp;
hp->heapMaxIndex-= 1;
maxHeapify(hp,0); //make heap from root node 0 to heapMaxIndex
} } int main()
{
inta[]={15,25,32,23,1,-4,35,2,-85,42,0,12,26,56,45,12,145,17,25,21};
printArr(a,20);
printf("\n"); Heaphpa,*phpa;
phpa= createHeap(a,20,&hpa);
heapSort(phpa); printArr(a,20);
putchar('\n');
return 0;
}
C语言排序的更多相关文章
- 数据结构(C语言)—排序
数据结构(C语言)—排序 排序 排序是按关键字的非递增或递减顺序对一组记录中心进行排序的操作.(将一组杂乱无章的数据按一定规律顺次排列起来.) 未定列表与不稳定列表 假设 Ki = Kj ( 1 ≤ ...
- C语言排序算法之简单交换法排序,直接选择排序,冒泡排序
C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...
- C语言排序算法复习
排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔 ...
- 两种常用的C语言排序算法
1. 要求输入10个整数,从大到小排序输出 输入:2 0 3 -4 8 9 5 1 7 6 输出:9 8 7 6 5 3 2 1 0 -4 解决方法:选择排序法 实现代码如下: #include &l ...
- C语言排序算法
(1)“冒泡法” 冒泡法大家都较熟悉.其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n].同理对a[1],a[2],...a[n-1]处理,即 ...
- c语言排序算法总结
一.希尔(Shell)排序法 /* Shell 排序法 */ #include <stdio.h> void sort(int v[],int n) { int gap,i,j, ...
- C语言排序算法学习笔记——选择类排序
选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了. 简 ...
- C语言排序算法学习笔记——交换类排序
交换类排序:根据序列中两个元素关键字的比较结果来交换他俩在序列中的位置. 冒泡排序:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i])则交换他们 ...
- C语言排序算法学习笔记——插入类排序
排序就是讲原本无序的序列重新排序成有序的序列.序列里可以是一个单独数据,也可以是多个数据组合的记录,按照记录里的主关键字或者次关键字进行排序. 排序的稳定性:如果排序表中有两个元素R1,R2,其对应的 ...
随机推荐
- python学习之while循环
Python While 循环语句 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语 ...
- 在Visual Studio 2017中发现的问题
最近抽时间学习了一下 C# 6.0 的新特性,其中的一个新特性是 ?. 运算符,请看下面的一个简单示例: 当我故意修改成错误代码的时候,请接着看下面的示例: 我想把代码修改成list?[0].Coun ...
- 初始jvm(一)---jvm内存区域与溢出
jvm内存区域与溢出 为什么学习jvm 木板原理,最短的一块板决定一个水的深度,当一个系统垃圾收集成为瓶颈的时候,那么就需要你对jvm的了解掌握. 当一个系统出现内存溢出,内存泄露的时候,因为你懂jv ...
- 在Swift中实现 oc与swift的混编
在Swift中想要引用OC头文件(import),可采用混编的方法,这里以sqlite为例,采用OC-Swift桥的方式实现添加头文件1引入sqlite数据库的库文件 打开工程配置文件,在build ...
- 【JAVASCRIPT】React学习-组件生命周期
摘要 整理组件加载过程,详细见官方文档:https://facebook.github.io/react/docs/react-component.html mount 过程 1)constructo ...
- C#的基础数据类型
一.概述 C# 的类型系统是统一的,因此任何类型的值都可以按对象处理.C# 中的每个类型直接或间接地从 object 类类型派生,而 object 是所有类型的最终基类.C#的数据类型主要分为三类:值 ...
- java 基础知识及Servlet基础
- VerilogHDL可综合设计的注意事项
可综合的语法已经记录得差不多了,剩下一些遗留的问题,在这里记录一下吧. 一.逻辑设计 (1)组合逻辑设计 下面是一些用Verilog进行组合逻辑设计时的一些注意事项: ①组合逻辑可以得到两种常用的RT ...
- Android开发之监听器
一直都想进行安卓开发,最近上手了Android.刚开始学习一些基本控件,学习Android就如同进入一个新的世界,印象最深的是这个世界的规则. 最近学习了监听器,对于这个我的一点理解是监听键盘活动 B ...
- Android学习笔记- Fragment实例 底部导航栏的实现
1.要实现的效果图以及工程目录结构: 先看看效果图吧: 接着看看我们的工程的目录结构: 2.实现流程: Step 1:写下底部选项的一些资源文件 我们从图上可以看到,我们底部的每一项点击的时候都有不同 ...