【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 创建 的全过程.整 ...
随机推荐
- 4-1 Linux用户管理命令详解
1. /etc/passwd 格式 用户名:密码:UID:GID:注释:家目录:默认shell useradd [options ] USERNAME -u: UID 要大于等于500, - ...
- hdu2588 GCD (欧拉函数)
GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数. (文末有题) 知 ...
- 详解用CSS3制作圆形滚动进度条动画效果
主 题 今天手把手教大家用CSS3制作圆形滚动进度条动画,想不会都难!那么,到底是什么东东呢?先不急,之前我分享了一个css实现进度条效果的博客<CSS实现进度条和订单进度条>,但是呢, ...
- python 第一章学习课程
http://www.runoob.com/python/python-dictionary.html
- GO语言总结(5)——类型转换和类型断言
上一篇博客介绍了Go语言的数组和切片——GO语言总结(4)——映射(Map),本篇博客介绍Go语言的类型转换和类型断言 由于Go语言不允许隐式类型转换.而类型转换和类型断言的本质,就是把一个类型转换到 ...
- [LeetCode] Expression Add Operators 表达式增加操作符
Given a string that contains only digits 0-9 and a target value, return all possibilities to add ope ...
- [LeetCode] Permutations 全排列
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- AppBox v6.0中实现子页面和父页面的复杂交互
前言 1. AppBox是捐赠开源(获取源代码至少需要捐赠作者 1 元钱),基于的 FineUI(开源版)则是完整开源,网址:http://fineui.codeplex.com/ 2. 你可以通过捐 ...
- Babel:JavaScript编译器
一.介绍: Babel是一个Javascript编译器,可以将ES6语法转换成ES5. 这意味着,你可以现在就用ES6编写程序,而不用担心现有环境是否支持.下面是一个例子: //转码前: input. ...
- 0103MySQL中的B-tree索引 USINGWHERE和USING INDEX同时出现
转自博客http://www.amogoo.com/article/4 前提1,为了与时俱进,文中数据库环境为MySQL5.6版本2,为了通用,更为了避免造数据的痛苦,文中所涉及表.数据,均来自于My ...

