The algorithm learning of sort which include Bubblesort,Insertsort,Quicksort and Mergesort.
Notice : these algorithms achieved by Java.
So,let's going to it.
firstly, what is Bubblesort? why we call it in this name?
emmmm.... Maybe this image will give you a clear understanding.
Bubblesort.jpg
I meet so many descriptions,and they all have a common that is : the key which in sorting will end in it's final position!
Bubblesort is stable
there is code:
import java.util.Arrays; public class BubbleSort{
public static void sort(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
}
public static void main(String [] args){
int[] ints={5,3,4,1,2};
sort(ints);
System.out.println(Arrays.toString(ints));
}
}
Secondly,about Insertsort
This sorting is find the appropriate position. when a key is low in front ,they will exchange.
code:
import java.util.Arrays;
public class InsertSort{
public static void sort(int[] arr){
int temp;
for(int i=0;i<arr.length;i++){
for(int j=0;j<i;j++){
if(arr[i]<arr[j]){ temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
public static void main(String [] args){
int [] ints={5,3,4,1,2};
sort(ints);
System.out.println(Arrays.toString(ints));
}
}
Thirdly,the Mergesort.
1,Request space to be the sum of two sorted sequences, which are used to store merged sequences
2,Set two pointers at the beginning of two sorted sequences
3,Compare the elements pointed by the two pointers, select the relatively small elements and place them in the merge space, and move the pointer to the next location.
4,Repeat step 3 until a pointer reaches the end of the sequence
5,Copy all the remaining elements of another sequence directly to the end of the merged sequence
code:
import java.util.Arrays; public class MergeSort{
public static void mergeSort(int [] arrays,int left,int right){
//如果数组还可以拆分
if(left<right)
{
//数组的中间位置
int middle=(left+right)/2;
//拆分左边数组
mergeSort(arrays,left,middle);
//拆分右边数组
mergeSort(arrays,middle+1,right);
//合并
merge(arrays,left,middle,right);
}
}
/*
合并数组
*/
public static void merge(int [] arr,int left,int middle,int right){
//申请合并空间 大小为两个已经排序序列之和
int [] temp=new int[right-left+1];
//i和j为两个已经排序号的数组的起始位置
int i=left;
int j=middle+1;
int k=0;
while(i<=middle&&j<=right){
//将比较小的数组放入合并空间
if(arr[i]<arr[j]){
temp[k++]=arr[i++]; }else{
temp[k++]=arr[j++];
}
}
//将左边剩余元素写入合并空间
while(i<=middle){
temp[k++]=arr[i++]; }
//将右边剩余元素写入合并空间
while(j<=right){
temp[k++]=arr[j++];
}
//将排序后的数组协会原来的数组
for(int l=0;l<temp.length;l++){
arr[l+left]=temp[l];
}
}
public static void main(String [] args){
int[] ints={5,3,4,1,2};
mergeSort(ints,0,ints.length-1);
System.out.println(Arrays.toString(ints));
}
}
The most important sorting :Quicksort
Quicksort , also known as partition-exchange sort, is short for Quicksort, a sort algorithm, first proposed by Tony Hall. On average, the order of n items is O (nlogn) times. In the worst case, O (n ^ 2) comparisons are required, but this is not common. In fact, Quick Sorting O (nlogn) is usually significantly faster than other algorithms because its inner loop can be achieved efficiently on most architectures.
step:
Pick out an element from a sequence called pivot.
Rearrange the sequence. All elements smaller than the benchmark are placed in front of the benchmark, and all elements larger than the benchmark are placed behind the benchmark (the same number can go to any side). After this segmentation, the benchmark is in the middle of the sequence. This is called a partition operation.
Recursively, the subordinate sequence of elements smaller than the base value and those larger than the base value is sorted.
code:
import java.util.Arrays; public class QuickSort{
public static void sort(int[] arr,int head,int tail){
if(head>=tail||arr==null||arr.length<=1){
return;
}
//设置数组的起始位置i 结束位置j 基准pivot为数组的中间
int i=head,j=tail,pivot=arr[(head+tail)/2];
while(i<=j){
//当数组小于基准 循环结束后 相当于i所处的位置的值为大于基准的元素
while(arr[i]<pivot){
++i;
}
//当数组大于基准 循环结束后 相当于j所处的位置的值为小于基准的元素
while(arr[j]>pivot){
--j;
}
//如果i<j 那么将交换i j对应位置的值
if(i<j){
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
//指针继续移动
++i;
--j;
}else if(i==j){
//如果i=j,那么说明本次排序已经结束,将i++ 如果这里不使用i++ 那么后面的sort(arr,i,tial)将改为sort(arr,i+1,tail)
++i;
}
}
//继续将数组分割
sort(arr,head,j);
sort(arr,i,tail);
} public static void main(String[] args){
int[] ints={5,3,4,1,2};
sort(ints,0,ints.length-1);
System.out.println(Arrays.toString(ints));
}
}
The algorithm learning of sort which include Bubblesort,Insertsort,Quicksort and Mergesort.的更多相关文章
- C++ algorithm 里的sort函数应用
MSDN中的定义: template<class RanIt> void sort(RanIt first, RanIt last); //--> 1)template< ...
- <algorithm>里的sort函数对结构体排序
题目描述 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签到.签离记录,请根据记录找出当天开门和关门的人. 输入描述: 每天的记录在第一行给出记录的条目数M (M &g ...
- STL下<algorithm>下的sort函数
定义: sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序.sort函数进行排序的时间复杂度为nlog2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#i ...
- HDOJ2037 今年暑假不AC (经典的贪心问题)
Description “今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会 ...
- super fast sort algorithm in js
super fast sort algorithm in js sort algorithm Promise.race (return the fast one) Async / Await // c ...
- greedy algorithm, insertion sort, quick sort
always makes the choice that seems to be the best at that moment. Example #1: @function: scheduling ...
- 选择排序、快速排序、归并排序、堆排序、快速排序实现及Sort()函数使用
1.问题来源 在刷题是遇到字符串相关问题中使用 strcmp()函数. 在函数比较过程中有使用 排序函数 Sort(beg,end,comp),其中comp这一项理解不是很彻底. #include & ...
- 反向输出及sort排序
建立条件:#include "algorithm"引用这个头文件 1.reverse 的用法,反向排序,由自己输入5个数: 1 2 3 4 5 for (int i = 0; i ...
- qsort函数、sort函数【转】
http://blog.163.com/yuhua_kui/blog/static/9679964420142195442766/ 先说明一下:qsort和sort,只能对连续内存的数据进行排序,像链 ...
随机推荐
- Centos 7部署docker
master安装: 安装zookeeper -openjdk java--openjdk-headless rpm -i packages/mesosphere-zookeeper--.centos7 ...
- MySQL 远程连接问题
使用Workbench 无法远程连接Mysql服务器提示如下错误: 查找原因: 显示只能localhost 访问. 解决方法:修改授权远程访问 create user 'root'@'%' ident ...
- OpenCV-Python:K值聚类
关于K聚类,我曾经在一篇博客中提到过,这里简单的做个回顾. KMeans的步骤以及其他的聚类算法 K-均值是因为它可以发现k个不同的簇,且每个簇的中心采用簇中所含值的均值计算 其他聚类算法:二分K-均 ...
- 获取Shell脚本当前的目录
https://qiushao.net/article/1489983836453?p=1&m=0 SCRIPT_DIR=$(cd $(dirname ${BASH_SOURCE[0]}); ...
- .net基础学java系列(二)IDE
上一篇文章.net基础学java系列(一)视野 废话: "视野"这篇文章,管理员说它比较空洞!也许初学者看不懂表格中的大部分内容!多年的neter估计也有很多不知道的! 有.net ...
- 看了这一张GIF图你就明白什么回事了,必看的经典!--快速构建一个请假流程
下面介绍一下FSBPM构建一个请假单流程 1.数据模型的构建 输入业务中需要的数据项即可,比如[申请人,开始时间,结束时间,请假天数,请假理由,附件上传..........] 2.自定义流程 审批节点 ...
- FSBPM 开发过程中一些提醒备注信息(供参考)
------智能OA系统开发过程中 前端开发前端 搜索查询的配置 运算操作符: like equals 共两种筛选数据方式. html标签上配置一下eg: <inpu ...
- DDD - 概述 - 聚合 (三)
不要再看那些理论啦,说的云里雾里的,绕到你怀疑人生 一句话概括聚合创建:聚合的一致性决定了聚合边界的确定,决定了聚合对象的创建.所谓的一致性即事务的一致性,细化就是 立即性和原子性.
- unity skybox天空盒分享无需下载
大概有几十种还是100种,具体忘了 反正很多就是了(哈哈哈哈哈!!!!!!!!!!!!) 老铁们, 多谢支持,谢谢大家. 根据需要使用,下面会分享出下载链接: 链接:https://pan.baidu ...
- 如何明确区分代码中的1和l
如poly1d 单独将其复制到记事本,然后按ctrl+F,输入要查找的对象,数字1或者小写字母l,找到的对象会已高亮表示,所以就可以确定了高亮表示的是数字1还是字母l.