排序小结(C版)
一、快速排序(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版)的更多相关文章
- 排序小结(C++版)
一.快速排序 #include <iostream> using namespace std; int adjust(int a[],int start,int end) { int i, ...
- 排序小结(java版)
一.归并排序 package org.lxh.demo08.b; class Sort { private int[] a; private int n; Sort(int n) { a=new in ...
- iOS可视化动态绘制八种排序过程(Swift版)
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- 排序算法系列:选择排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)
在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 我总结一个清晰不罗嗦版: 原理: 从数组头元素索引i开始,寻找后面最小的值(比i位 ...
- 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题
常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...
- 常用排序算法--java版
package com.whw.sortPractice; import java.util.Arrays; public class Sort { /** * 遍历一个数组 * @param sor ...
- 秒杀9种排序算法(JavaScript版)
一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...
- Qt之QHeaderView自定义排序(终极版)
简述 本节主要解决自定义排序衍生的第二个问题-将整形显示为字符串,而排序依然正常. 下面我们介绍三种方案: 委托绘制 用户数据 辅助列 很多人也许会有疑虑,平时都用delegate来绘制各种按钮.图标 ...
- 常见的链表排序(Java版)
上篇博客中讲解了九大内部排序算法,部分算法还提供了代码实现,但是那些代码实现都是基于数组进行排序的,本篇博客就以链表排序实现几种常见的排序算法,以飨读者. 快速排序的链表实现 算法思想:对于一个链表, ...
随机推荐
- Linux多节点互信配置
SSH互信设置步骤: 1. 每个节点上分别生成自己的公钥和私钥 2. 将各节点的公钥文件汇总到一个总的认证文件authorized_keys中 3. 将这个包含了所有节点公钥的认证文件au ...
- 随机获取数据库中的某一条数据(基于yii2框架开发)
注意: 使用PHP函数array_rand()得到的是这个数组中的那个值相对应的下标键值,需要配合原来的数组进行,例如: $rand_keys = array_rand($ids,1); $id = ...
- Linux中/proc目录下文件详解
转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...
- (6) 深入理解Java Class文件格式(五)
前情回顾 本专栏的前几篇博文, 对class文件中的常量池进行了详细的解释. 前文讲解了常量池中的7种数据项, 它们分别是: CONSTANT_Utf8_info CONSTANT_NameAndTy ...
- centos6.6编译安装lnmp系列之nginx
简介: 环境:虚拟机+centos6.6 Cmake下载地址:http://www.cmake.org/files/v3.0/cmake-3.0.2.tar.gz Nginx 下载地址: http:/ ...
- C++去掉字符串首尾的 空格 换行 回车
/* *去掉字符串首尾的 \x20 \r \n 字符 */ void TrimSpace(char* str) { ; char *end = str; char *p = str; while(*p ...
- uploadify springMVC
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Java 中文字符串编码之GBK转UTF-8
写过两篇关于编码的文章了,以为自己比较了解编码了呢?! 结果今天又结结实实的上了一课. 以前转来转去解决的问题终归还是简单的情形.即iso-8859-1转utf-8,或者iso-8859-1转gbk, ...
- jquery总结04-DOM节点操作
一般js操作节点 ①创建节点(元素文本)document.createElement innerHTML ②添加属性 setAttribute ③加入文档 appendChild 操作繁琐还有兼容性 ...
- 解决Jenkins打不开浏览器问题
参考:http://blog.csdn.net/achang21/article/details/45096003 1.控制面板禁用掉jenkins服务 2.java -jar jenkins.war ...