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 ...
随机推荐
- Selenium2+python自动化29-js处理多窗口
前言 在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口.句柄(handle)),这样在多个窗口之间来回切换比较复杂,那么有没 ...
- ConcurrentHashMap之实现细节
ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了 ...
- @Java类加载器及双亲委派模型
类与类加载器 虚拟机设计团队把类加载阶段的"通过一个类的全限定名来获取此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个 ...
- [21] Mesh法线的生成算法
// 生成顶点法线 bool YfCalculateVertexNormal ( void* pNormalsBuffer, Yuint normalStriding, Yuint normalPos ...
- Qt5设置应用程序图标
1.设置应用程序图标 简单三步走,搞定 ①创建一个图标格式的文件,可以网上在线将普通的图形格式转成.ico 格式的图标文件 http://www.faviconico.org/ 这个网站可以在线转换p ...
- iOS开发-JSON解析
JSON(JavaScript Object Notation)在网络传输中几乎无处不在,JSON是一种轻量级的数据交换格式,是基于JavaScript(Standard ECMA-262 3rd E ...
- Best Time to Buy and Sell Stock II leetcode java
题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...
- jQuery图片上传前先在本地预览
js代码: /* *名称:图片上传本地预览插件 v1.1 *作者:周祥 *时间:2013年11月26日 *介绍:基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持saf ...
- PCL学习笔记二:Registration (ICP算法)
原文:http://blog.csdn.net/u010696366/article/details/8941938 PCL Registration API Registration:不断调整,把不 ...
- 红米NOTE应用闪退(包括系统设置等各种界面)问题解决经历
关机状态下同时按减音量按钮和开机按钮,进入一个菜单,选择recovery(减音量键是移动,加音量键是确定),当出现一个倒地的机器人的时候,稍待片刻按开机键会出现双清以及刷机菜单.wipe data/f ...