C实现9种排序算法
算法复杂度以及稳定性分析
算法名称 | 平均时间 | 辅助空间 | 稳定性 |
冒泡排序 | O(n2) | O(1) | 是 |
选择排序 | O(n2) | O(1) | 否 |
插入排序 | O(n2) | O(1) | 是 |
自底向上归并排序 | O(nlog2n) | O(n) | 是 |
自顶向下归并排序 | O(nlog2n) | O(n) | 是 |
快速排序 | O(nlog2n) | O(n) | 否 |
堆排序 | O(nlog2n) | O(1) | 否 |
基数排序 | O(dn) | O(rn) | 是 |
希尔排序 | \ | O(1) | 否 |
排序的时间效率比较
算法名称 | 1万 | 2万 | 3万 | 4万 | 5万 | 6万 | 7万 | 8万 | 9万 | 10万 |
冒泡排序 | 1442 | 5497 | 12206 | 21861 | 34017 | 49148 | 67394 | 88880 | 111939 | 139071 |
选择排序 | 199 | 816 | 1790 | 3254 | 5062 | 7166 | 9645 | 12636 | 16102 | 19643 |
插入排序 | 178 | 717 | 1628 | 2882 | 4458 | 6446 | 8822 | 11649 | 14547 | 17914 |
自底向上归并排序 | 3 | 6 | 9 | 12 | 15 | 18 | 22 | 26 | 28 | 33 |
自顶向下归并排序 | 3 | 7 | 11 | 15 | 18 | 23 | 27 | 31 | 36 | 40 |
快速排序 | 2 | 5 | 8 | 11 | 14 | 18 | 21 | 25 | 29 | 32 |
堆排序 | 3 | 7 | 12 | 16 | 19 | 23 | 26 | 30 | 34 | 37 |
基数排序 | 9 | 21 | 30 | 40 | 49 | 59 | 66 | 75 | 90 | 98 |
希尔排序 | 3 | 8 | 11 | 15 | 24 | 24 | 29 | 35 | 40 | 41 |
下面是C代码
#include <stdio.h>
#include <stdlib.h> #define LENGTH(s) (sizeof(s)/sizeof(int))
#define SWAP(x,y) {long t; t=x; x=y; y=t;} //冒泡排序
void BubbleSort(int **p,int len){
int i,j; for(i=0;i<len;i++){//外层控制循环次数
for(j=0;j<len-i;j++){//控制交换次数
if((*p)[j]>(*p)[j+1]){
SWAP((*p)[j],(*p)[j+1]);
}
}
}
} //选择排序
void SelectSort(int **p,int len){
int i,j,k; for(i=0;i<len;i++){
k=i;
for(j=i+1;j<len;j++){
if((*p)[k]>(*p)[j]){
k=j;
}
}
if(k!=i){
SWAP((*p)[k],(*p)[i]);
}
} } //插入排序
void InsertSort(int **p,int len){
int i,j,k; for(i=1;i<len;i++){
k=(*p)[i];
for(j=i-1;j>=0;j--){
if((*p)[j]>k){
(*p)[j+1]=(*p)[j];
}else{
break;
}
}
(*p)[j+1]=k;
}
} //快速排序
void QuickSort(int **p,int min,int max){
int i,j,k;
if(min<max){
i=min;j=max;k=(*p)[i];
while(i<j){
while(i<j && (*p)[j]>k)
j--;
if(i<j)
(*p)[i++]=(*p)[j]; while(i<j && (*p)[i]<k)
i++;
if(i<j)
(*p)[j--]=(*p)[i];
}
(*p)[i]=k;
QuickSort(p,min,i-1);
QuickSort(p,i+1,max);
}
} void main(){
int arr[]={1233,22,38,99,90,1,23,45,394,2,384,45,100,-10,22};
int i,*p=arr;
int len=LENGTH(arr);
//BubbleSort(&p,len);
//SelectSort(&p,len);
//InsertSort(&p,len);
QuickSort(&p,0,len);
for(i=0;i<len;i++){
printf("%d\n",arr[i]);
}
}
C实现9种排序算法的更多相关文章
- 几种排序算法的学习,利用Python和C实现
之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...
- 秒杀9种排序算法(JavaScript版)
一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...
- PHP的几种排序算法的比较
这里列出了几种PHP的排序算法的时间比较的结果,,希望对大家有所帮助 /* * php 四种排序算法的时间与内置的sort排序比较 * 3000个元素,四种算法的排序所用的时间比较 * 冒泡排序 85 ...
- 学习Java绝对要懂的,Java编程中最常用的几种排序算法!
今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来! ,群里有免费的学习视频和项目给大家练手.大神有空时也 ...
- C#常用8种排序算法实现以及原理简介
public static class SortExtention { #region 冒泡排序 /* * 已知一组无序数据a[1].a[2].--a[n],需将其按升序排列.首先比较a[1]与a[2 ...
- 排序—时间复杂度为O(n2)的三种排序算法
1 如何评价.分析一个排序算法? 很多语言.数据库都已经封装了关于排序算法的实现代码.所以我们学习排序算法目的更多的不是为了去实现这些代码,而是灵活的应用这些算法和解决更为复杂的问题,所以更重要的是学 ...
- java算法03 - 常用的8种排序算法
Java常用的八种排序算法: 插入排序 - 直接插入排序 每次将待排序的记录按照关键字的大小,插入到前面已经排好序的记录的适当位置.直到全部记录插入完成. 代码实现 /** * 直接插入排序 O(n^ ...
- 用 C 语言描述几种排序算法
排序算法是最基本且重要的一类算法,本文基于 VS2017,使用 C 语言来实现一些基本的排序算法. 一.选择排序 选择排序,先找到数组中最小的元素,然后将这个元素与数组的第一个元素位置互换(如果第一个 ...
- 【C++】四种排序算法的时间比较
四种排序算法的时间比较 [注]clock函数对输入(用户输入)元素N排序的计时 #include<iostream> #include<time.h> using namesp ...
- 几种排序算法及Java实现排序的几种方式
几种排序算法 下面的例子介绍了4种排序方法: 冒泡排序, 选择排序, 插入排序, 快速排序 package date201709.date20170915; public class SortUtil ...
随机推荐
- .NET:如何让线程支持超时?
背景 本文是为了回复博客园一个兄弟的问题,主要回答两个问题: 如何让线程支持超时? 如何让线程在执行结束后销毁? MS 现在不推荐使用低级别的 Thread 编程,而推荐使用 Task,另外我多数情况 ...
- Hadoop-2.2.0中文文档——Common-Hadoop HTTP web控制台认证
简单介绍 此文档描写叙述了怎样配置Hadoop HTTP web控制台,去要求用户认证. 默认地,Hadoop HTTP web控制台(JobTracker, NameNode, TaskTracke ...
- 使用 Reachability 获取网络状态
Reachability source https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Int ...
- Maven最佳实践:Maven仓库
什么是Maven仓库 在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文 件,如log4j.jar,junit. ...
- 使用jquery操作iframe
1. 内容里有两个ifame <iframe id="leftiframe"...</iframe> <iframe id="mainiframe ...
- 数学图形(1.45)毛雷尔玫瑰(Maurer rose)
毛雷尔玫瑰,也有的翻译是毛瑞尔,它是一种很漂亮的图形.玫瑰线的变异品种. 我没有找到其中文的解释,有兴趣可以看下维基上的相关页面. A Maurer rose of the rose r = sin( ...
- Oracle—RMAN完全恢复
一.RMAN完全恢复的相关概念 1.在RMAN完全恢复中主要使用两个命令,一个是restore,另一个是recover. 2.可以在三个级别恢复,数据库,表空间,数据文件. 3.RMAN中应对于各种情 ...
- 检测设备平台,操作系统,方向 Javascript 库:Device.js
Device.js 是一个可以让你检测设备的平台,操作系统和方向 JavaScript 库,它会自动在 <html> 标签添加一些设备平台,操作系统,方向相关的 CSS class,这样就 ...
- Callable、Future&阻塞队列&阻塞栈
Callable.Future 简单应用 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了.现在Java终于有可返回值的任务( ...
- Style 的查找 FindResource
1)根据名称查找 PrintPreview fe = new PrintPreview(new Summary()); string strResourceHeader = "headerS ...