常见排序算法JAVA实现
1、冒泡排序,时间复杂度:最好:T(n) = O(n) ,情况:T(n) = O(n2) ,平均:T(n) = O(n2)
public int[] bubbleSort(int[] nums) {
if (nums.length < 2) {
return nums;
}
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
int tem = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = tem;
}
}
}
return nums;
}
2、选择排序,时间复杂度:最好:T(n) = O(n2) ,最差:T(n) = O(n2) ,平均:T(n) = O(n2)
public int[] selectSort(int[] nums) {
if (nums.length < 2) {
return nums;
}
for (int i = 0; i < nums.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < nums.length; j++) {
if (nums[minIndex] > nums[j]) {
minIndex = j;
}
}
if (minIndex != i) {
int tem = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = tem;
}
}
return nums;
}
3、插入排序,时间复杂度:最好:T(n) = O(n) ,情况:T(n) = O(n2) ,平均:T(n) = O(n2)
public int[] insertSort(int[] nums) {
if (nums.length < 2) {
return nums;
}
for (int i = 0; i < nums.length - 1; i++) {
int cur = nums[i + 1];
int per = i;
while (per >= 0 && nums[per] > cur) {
nums[per + 1] = nums[per];
per--;
}
nums[per + 1] = cur;
}
return nums;
}
4、快速排序,时间复杂度:最好:T(n) = O(nlogn) ,最差:T(n) = O(n2), 平均:T(n) = O(nlogn)。它无法保证相等的元素相对位置不变,是不稳定的排序
public int[] quickSort(int[] nums) {
if (nums.length < 2) {
return nums;
}
sort(nums, 0, nums.length - 1);
return nums;
} private void sort(int nums[], int low, int high) {
int l = low, h = high;
int povit = nums[low];
while (l < h) {
while (l < h && nums[h] >= povit)
h--;
if (l < h) {
nums[l] = nums[h];
l++;
}
while (l < h && nums[l] <= povit)
l++;
if (l < h) {
nums[h] = nums[l];
h--;
}
}
nums[l] = povit;
if (l - 1 > low)
sort(nums, low, l - 1);
if (h + 1 < high)
sort(nums, h + 1, high);
}
5、归并排序,时间复杂度:最好:T(n) = O(n) ,最差:T(n) = O(nlogn) ,平均:T(n) = O(nlogn)
public int[] mergeSort(int[] nums) {
if (nums.length < 2) {
return nums;
}
int mid = nums.length / 2;
int[] nums1 = Arrays.copyOfRange(nums, 0, mid);
int[] nums2 = Arrays.copyOfRange(nums, mid, nums.length);
return merge(mergeSort(nums1), mergeSort(nums2));
} private int[] merge(int[] nums1, int[] nums2) {
int[] back = new int[nums1.length + nums2.length];
for (int i = 0, m = 0, n = 0; i < back.length; i++) {
if (m == nums1.length) {
back[i] = nums2[n++];
} else if (n == nums2.length) {
back[i] = nums2[m++];
} else if (nums1[m] < nums2[n]) {
back[i] = nums1[m++];
} else {
back[i] = nums2[n++];
}
}
return back;
}
常见排序算法JAVA实现的更多相关文章
- 常见排序算法 - Java实现
1.冒泡排序 每次比较相邻的两个元素大小,调整顺序.从头到尾执行一轮(i),最大数值的元素就排到最后.每次从头到尾执行一轮,都会排好一个元素(length - i - 1).这就是说一个包含 n 个元 ...
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- 常见排序算法总结 -- java实现
常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- Java基础语法(8)-数组中的常见排序算法
title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...
- 常见排序算法总结(java版)
一.冒泡排序 1.原理:相邻元素两两比较,大的往后放.第一次完毕,最大值在最大索引处. 即使用相邻的两个元素一次比价,依次将最大的数放到最后. 2.代码: public static void bub ...
- 常见排序算法(java实现)
常见排序算法介绍 冒泡排序 代码: public class BubbleSort { public static void sort(int[] array) { int tValue; for ( ...
- 八大排序算法Java实现
本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...
随机推荐
- ogg 12.3 for sqlserver 2016/2014 CDC模式配置
本文主要讲述ogg 12.3 通过CDC抽取mssqlserver 2016 enterprise的过程,以sqlserver为目标端投递配置相对简单,所以在此不在赘述. 针对以前的mssqlserv ...
- Sql Server语句大全
T-SQL语句大全 --跳转到SQL myDemo USE [SQL myDemo] go --声明变量id declare @id int --为变量赋值:直接赋值 --将cid为3的cname值赋 ...
- java导出csv格式文件
导出csv格式文件的本质是导出以逗号为分隔的文本数据 import java.io.BufferedWriter; import java.io.File; import java.io.FileIn ...
- es2018(es9)前瞻
命名捕获 语法 : ?<name> 一:举个栗子 我们要把从2018-05-20取出年月日 1:普通方法 let str = '2018-05-20'; let reg1 = /(\d{4 ...
- flutter packages.
connectivity This plugin allows Flutter apps to discover network connectivity and configure themselv ...
- Client does not support authentication
Navicat 11 连MySQL 8.0.16 报 Client does not support authentication........ 解决: alter user 'fabu'@'%' ...
- springMVC注解总结
由于BookController类加了value="/book"的@RequestMapping的注解,所以相关路径都要加上"/book",即请求的url分别为 ...
- sort排序原理
var array = [10,5,40,25,1000,1]; array.sort(compareFunction); function compareFunction(a, b) { ...
- 关于js中的类式继承
; }; ,,]; }; ); ; }; //子类 function Bb(){ }; var F=new f(); F.prototype=Aa.prototype;//此处只能传递方法,没有办法传 ...
- unittest用例执行的顺序
unittest在执行用例(test_xxx)时,并不是按从上到下的顺序执行,有特定的顺序. 示例: import unittest class TestBdd(unittest.TestCase): ...