【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 创建 的全过程.整 ...
随机推荐
- Jenkins——构建、集成中的问题
准备 Jekins 安装插件 MsBuild Plugin Team Foundation Server Plug-in 配置环境变量 我的电脑中设置环境变量,Path中添加msbuild的路 ...
- An error occurred during the installation of assembly 'Microsoft.VC90.CRT……的问题
有一段时间没有用到AnkhSvn了,今天工作需要安装了一下.结果安装到一半就无法继续了,提示An error occurred during the installation of assembly ...
- java工具类之Graphics
利用重写paint()方法绘画出一个坐标轴: package huaxian; import java.awt.Color; import java.awt.FlowLayout; import ja ...
- [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)
Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...
- jpa+springmvc+springdata(一)
学习尚硅谷笔记: 首先配置application.xml: <?xml version="1.0" encoding="UTF-8"?> <b ...
- [LeetCode] Coin Change 硬币找零
You are given coins of different denominations and a total amount of money amount. Write a function ...
- QDialog QMainwindow QWidget QFrame不同时候用法.
继承关系:在Qt中所有的类都有一个共同的基类QObject ,QWidget直接继承与QPaintDevice类,QDialog.QMainWindow.QFrame直接继承QWidget 类. ...
- 【MySQL】mysql workbench
1.导入,导出,数据之间的传输[两台服务器]2.连接管理3.服务器管理4.表的管理
- Mysql 中文乱码(Navicat for MySQL)
在使用Navicat for MySQL查看插入数据库的数据时,发现中文显示为乱码.搞了好久,理清思路如下: 确定mysql本身编码设置为utf8(也可以为gbk gb2312等) 用Navicat ...
- 【USACO 3.2】Sweet Butter(最短路)
题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...