频道澳门葡京手机版网址
登录注册
澳门葡京手机版网址 > 网络 > 云计算 > 正文

6种排序算法java实现解析

2018-09-28 10:00:44           
收藏   我要投稿

6种排序算法

冒泡排序 选择排序 插入排序 计数排序 快速排序 归并排序

1)冒泡排序

相邻的两个数字比较排序,先将最大的交换到最后面,然后重复。

代码实现

2)选择排序

从第一个位置开始,用某个位置依次与后边所有元素比较一遍,如果后面的某个位置的数比该位置的数小,就换一换位置。

3)插入排序

某个位置与前边所有元素比较, 这个位置的元素比前边元素小, 那么把这个位置的元素插入到比它大的那个元素的位置。

4)计数排序

Hbase 布隆过滤器 计数排序

利用数组的下标进行排序(要求理解原理)

代码实现

public class JiShuPaiXu {

public static void main(String[] args) {

int[] arr = {2,1,4,7,2,8,1,5,1};

jisupaicu(arr);

}

public static void jisupaicu(int[] arr){

int max = arr[0];

for(int i =1;imax){

max=arr[i];

}

}

int[] newArr = new int[max+1];

for(int i = 0;i5)快速排序时间复杂度nlogn1、原理: 对数组排序 先选取一个基准点,作用:基准点左侧小于基准点的数据,基准点右侧大于基准点的数据 基准点:最常用的基准点选第一个 一个大数组不停的进行拆分 拆分的最终结果每个数组只有一个元素代码实现public class QuickSort {

public static void main(String[] args) {

int[] arr={1,34,2,5,6,7,8,9,0,10,2,3,4,5};

sort(arr,0,arr.length-1);

System.out.println(Arrays.toString(arr));

}

//参数

//出口

/**

*

* @param arr

* @param left 左侧的元素下标位置

* @param right 右侧元素的下标

* 运行的条件 leftright){

return;

}

//符合递归的逻辑的

//拆分 大数组 按照大家的规则拆分

//关键找基准点

int point=getIndexPoint(arr,left,right);

//进行递归回调

//先对左侧数组进行回调

sort(arr,left,point-1);

//对右侧的数组进行回调

sort(arr,point+1,right);

}

//为每一个数组找基准点

private static int getIndexPoint(int[] arr, int left, int right) {

//指定初始的基准点

int key=arr[left];

while(left=key&&left6)归并排序:时间复杂度nlogn2路归并排序做的是两个有序集合的排序便于理解 拿两个有序的数组进行排序前提:两个数据集都是已经排好序的。只有一个数据集。这个数据集是排好序的对一个大的数据集进行排序 将大的数据集分成多个小的数据集 这里的多个小的数据集是排好序的归并排序进行拆分的时候 拆分的小数据集每个数据集中只有一个元素归:拆分的过程并:将两两个数据集进行汇笼排序。Merge(文件归并)代码实现:public class MergeSort01 {

public static void sort(int[] arr1,int[] arr2){

//记录两个数组的下标变化

int m=0;

int n=0;

int index=0;

//两个变量记录最大的下标

int x=arr1.length-1;

int y=arr2.length-1;

//创建一个新的数组 作用:盛放最终的结果

int[] newarr=new int[arr1.length+arr2.length];

//循环遍历比较 while循环不能确定循环次数

while(m<=x && n<=y){

if(arr1[m]=arr2[n]

newarr[index++]=arr2[n++];

}

}

while(m<=x){

newarr[index++]=arr1[m++];

}

while(n<=y){

newarr[index++]=arr2[n++];

}

for(int i:newarr){

System.out.print(i+" ");

}

}

public static void main(String[] args) {

int[] arr1={1,2,4,6,7};

int[] arr2={2,3,5,7,8,9,12,14};

sort(arr1, arr2);

}

}

实例一:归并排序public class MergeSortFinal {

public static void main(String[] args) {

int[] arr={3,1,2,5,7,5,3,8,7,6,4,8,9,34,56,78,23,12,11};

int[] newarr=new int[arr.length];

chai(arr,0,arr.length-1,newarr);

System.out.println(Arrays.toString(arr));

}

//拆分 递归

public static void chai(int[] arr,int left,int right,int[] newarr){

if(left>=right){

return;

}else{

int mid=(left+right)/2; //计算中间值

//递归调用

//左半部分

chai(arr, left, mid,newarr);//边界

chai(arr,mid+1,right,newarr);//这句代码实行完,整个拆的过程完成

//并

mergeResult(arr, left, right, mid, newarr);

}

}

//并 merge文件归并

public static void mergeResult(int[] arr,int left,int right,int mid,int[] newarr){

//定义;两个变量 记录数据集的左侧的边界

int m=left;

int n=mid+1;

//定义两个变量 记录每个数据集的右侧的边界

int x=mid;

int y=right;

//定义一个变量 记录新数组的下标的

int index=0;

while(m<=x&&n<=y){

if(arr[m]=arr[mid+1]

newarr[index++]=arr[n++];;

}

}

while(m<=x){

newarr[index++]=arr[m++];

}

while(n<=y){

newarr[index++]=arr[n++];

}

for(int i=0;i

上一篇:Spark实现排序
下一篇:MySql之基本数据库操作语句、三大列类型解析
相关文章
图文推荐

关于大家 | 联系大家 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 澳门葡京手机版网址_澳门新莆京娱乐_www.88807.com - 点此进入--致力于做实用的IT技术学习网站

XML 地图 | Sitemap 地图