【Sorting Collection】
排序集锦
各种排序算法,总结一下,一直在遗忘......
【冒泡排序】
就是下面这个鬼啦:

c实现代码(升序):
#include<stdio.h> void BubbleSort(int *array,int num)
{
int i,j,temp;
for(j=;j<num;j++)
{
for(i=;i<num-j;i++)
{
if(array[i-]>array[i]) //倒序就把这里改成<咯
{
temp=array[i-];
array[i-]=array[i];
array[i]=temp;
}
}
}
}
int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
BubbleSort(array,num);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ; }
【插入排序】
按顺序插入

C语言实现:
#include<stdio.h> void insertionsort(int *array,int num)
{
int i,j;
for(i=;i<num;i++)
{
int current=array[i];
j=i-;
while(j>= && array[j]>current)
{
array[j+]=array[j];//后移为current空出位置
j--;
}
array[j+]=current;//将current插入空位
}
} int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
insertionsort(array,num);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;
}
【希尔排序】
C语言实现代
#include<stdio.h>
void shellsort(int *array,int num)
{
int i,j,increment,temp;
for(increment=num/;increment>;increment/=)
{
for(i=increment;i<num;i++)
{
temp=array[i];
for(j=i;i>=increment;j-=increment)
{
if(temp<array[j-increment])
{
array[j]=array[j-increment];
}
else
{
break;
}
}
array[j]=temp;
} //这里其实跟普通插入一样咯,除了间隔大点
} //更改步长,直至最后increment=1,即为普通插入排序
} int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
shellsort(array,num);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;
}
【选择排序】
C语言实现代码:
#include<stdio.h>
void selectionsort(int *array,int num)
{
int i,j,minindex,temp;
for(i=;i<num;i++) //从0开始挑选出i之后最小的数放到i的位置
{
minindex=i;
for(j=i+;j<num;j++)
{
if(array[j]<array[minindex])
{
minindex=j;
}
}
temp=array[i];
array[i]=array[minindex];
array[minindex]=temp;
}
} int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
selectionsort(array,num);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;
}
【归并排序】
排序过程动图:

C语言实现代码:
#include<stdio.h> void merge(int *array,int left,int mid,int right)
{
int temp[right-left+];
int pos=,lpos=left,rpos=mid+;
int i;
/*分两个阶段考虑:
①左右两端都未遍历完——比较排序
②有一边遍历完但另一边没有——将未遍历完的依次添加到排序数列后面
最后将temp放入array*/
while(lpos<=mid&&rpos<=right)
{
if(array[lpos]<array[rpos])
{
temp[pos++]=array[lpos++];
}
else
{
temp[pos++]=array[rpos++];
}
}
//阶段①↑
while(lpos<=mid)
temp[pos++]=array[lpos++];
while(rpos<=mid)
temp[pos++]=array[rpos++];
//阶段②↑
for(i=;i<pos;i++)
{
array[i+left]=temp[i];
}
} //归并过程
void mergesort(int *array,int left,int right)
{
int mid=(left+right)/;
if(left<right) //当left=right,返回上层进行merge()
{
mergesort(array,left,mid);
mergesort(array,mid,right);
merge(array,left,mid,right);
} //递归
}
int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
mergesort(array,,num-);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;
}
Properties ∠( ᐛ 」∠)_:
| 最差时间复杂度 | ![]() |
|---|---|
| 最优时间复杂度 | ![]() |
| 平均时间复杂度 | ![]() |
| 最差空间复杂度 | ![]() |
【快速排序】
Quick Sort是Bubble Sort改进方法。
和归并一样用到分治思想。
图示:

C语言实现代码:
#include<stdio.h>
void quicksort(int *array,int from,int to)
{
if(from>=to) return;
int pivot=array[from]; //pivot就是划分数,即开头那个数啦(其实选哪个数做pivot随你啦)
int i=from,j,temp;
for(j=from+;j<=to;j++) //遍历pivot之后的数
{
if(array[j]<pivot)
{
i=i+; //i在计数比pivot小的数的数量
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
} //通过这个循环将划分区域内数按大小关系分成大于pivot和小于pivot两拨
temp=array[i];
array[i]=array[from];
array[from]=temp;
//将i位置与起始位置数值调换,将pivot换到中间值,原i位置是右边那拨最小数
quicksort(array,from,i-);
quicksort(array,i+,to);
//递归,对pivot两边区域继续quicksort
} int main()
{
int num;
scanf("%d",&num);
int array[num];
int i;
for(i=;i<num;i++)
{
scanf("%d",&array[i]);
}
quicksort(array,,num-);
for(i=;i<num;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return ;
}
其他堆排序什么的之后鞋数据结构再说吧QAQ
【Sorting Collection】的更多相关文章
- C#梳理【集合Collection】
C# 集合(Collection) 集合(Collection)类是专门用于数据存储和检索的类.这些类提供了对栈(stack).队列(queue).列表(list)和哈希表(hash table)的支 ...
- 【Unity3D实战】摇摆直升机开发实战(一)
[Unity3D实战]摇摆直升机开发实战(一) 1.点击[Assets],创建[Sprites]和[Resources]文件夹,然后将所需要的素材导入[Sprites]文件夹中. 2.找到[Sprit ...
- 【python进阶】Garbage collection垃圾回收2
前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...
- 【Spring实战】----开篇(包含系列目录链接)
[Spring实战]----开篇(包含系列目录链接) 置顶2016年11月10日 11:12:56 阅读数:3617 终于还是要对Spring进行解剖,接下来Spring实战篇系列会以应用了Sprin ...
- 20个新鲜出炉的网站模板【HTML & PSD】
这里给大家分享20 个新鲜出炉的免费网站模板.这些设计元素将成为你下一个项目的重要素材,可以帮你节省很多的时间.与往常一样,我们经常漫游网络,寻找最好的资源, HTML.CSS 和 PSD 等等,记得 ...
- Python开发【第二章】:Python的数据类型
基本数据类型 一.整型 如: 18.73.84 整型具备如下功能: class int(object): """ int(x=0) -> int or long i ...
- 【MongoDB数据库】MongoDB 命令入门初探
MongoDB是一款NoSql数据库,使用了"面向集合"(Collection-Oriented)原理,意思是数据被分组存储在数据集中,被称为一个集合(Collection).每一 ...
- IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】
NIIT第二十一天 上午 集合 1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center&quo ...
- 【Holograms 101D】一步步用Unity 开发 Hologram
转载请注明出处: copperface:[Holograms 101D]一步步用Unity 开发 Hologram Holograms 101 该教程将带领你走完 Hologram 创建 的全过程.整 ...
随机推荐
- [LeetCode] Trapping Rain Water II 收集雨水之二
Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevati ...
- [LeetCode] Spiral Matrix 螺旋矩阵
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构
基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级的缓存模块.日志模块.上传缩略图模块.通用配置及服务调用, 提供了OA.CRM.CMS的原型实例,适合快速构建中小型互联网及行业 ...
- C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper(三:附源码)
前言:之前的两篇封装了一些基础的表单组件,这篇继续来封装几个基于bootstrap的其他组件.和上篇不同的是,这篇的有几个组件需要某些js文件的支持. 本文原创地址:http://www.cnblog ...
- 如何在HoloLens中创建一个2D的Hello World程序
注:本文提及到的代码示例下载地址 > How to build an "Hello World" 2D app in HololLens. HoloLens 是微软的一款MR ...
- HTTP服务器(2)
导语 重定向器是特殊用途的HTTP服务器的另一个简单而有用的应用程序.它的作用就是将用户从一个WEB网站重定向到另外一个网站.下面是一个简单的例子,程序沿用上一个SingleHttpServer代码. ...
- 1229【MySQL】性能优化之 Index Condition Pushdown
转自http://blog.itpub.net/22664653/viewspace-1210844/ [MySQL]性能优化之 Index Condition Pushdown2014-07-06 ...
- 【BZOJ 2595】【WC 2008】游览计划
http://www.lydsy.com/JudgeOnline/problem.php?id=2595 斯坦纳树的例题诶...我怎么做了好长时间_(:з」∠)_ 首先这是一棵树. 状压表示状态,\( ...
- jquery获取url参数及url加参数的方法
转--http://www.jb51.net/article/73896.htm <script src="js/jquery-1.7.2.min.js" type=&quo ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

