Java基础之各种排序算法

import java.util.Scanner;

/**

* @author 杨川

*

*/

public class Sort {

public static void main(String[] args) {

int a[] = input();

insertSort(a);

shellSort(a);

selectSort(a);

fastSort(a,0,a.length-1);

for (int k = 0; k < a.length; k++) {

System.out.print(a[k] + " ");

}

}

static void fastSort(int[]a,int s,int t){

int i=s;

int j=t;

if (s<t) {

int last=a[s];

while(i!=j){

while(j>i&&a[j]>=last){

j--;

}

a[i]=a[j];

while(i<j&&a[i]<=last){

i++;

}

a[j]=a[i];

}

a[i]=last;

fastSort(a,s,i-1);

fastSort(a, i+1, t);

}

}

static int[] selectSort(int a[]){

for (int i = 0; i < a.length-1; i++) {

int min=i;

for (int j = i+1; j < a.length; j++) {

if (a[j]<a[min]) {

min=j;

}

}

if (min!=i) {

int temp=a[i];

a[i]=a[min];

a[min]=temp;

}

}

for (int i = 0; i < a.length; i++) {

System.out.print(a[i] + " ");

}

return a;

}

static int[] insertSort(int a[]) {

for (int i = 1; i < a.length; i++) {

int temp = a[i];

int j = i - 1;

while (j >= 0 && temp < a[j]) { // 比前面的小的话元素逐个往后移,直到找到不小于它的位置(正确位置)

a[j + 1] = a[j];

j--;

}

a[j + 1] = temp;

}

for (int i = 0; i < a.length; i++) {

System.out.print(a[i] + " ");

}

return a;

}

static int[] shellSort(int a[]) {

int gap = a.length/2;

while (gap > 0) {

// int gap=5;

for (int i = gap; i < a.length; i++) {

int temp = a[i];

int j = i - gap;

while (j >= 0 && temp < a[j]) {

a[j + gap] = a[j];

j -= gap;

}

a[j + gap] = temp;

}

gap = gap/2;

}

for (int i = 0; i < a.length; i++) {

System.out.print(a[i] + " ");

}

return a;

}

static int[] input() {

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

int a[] = new int[n];

for (int i = 0; i < n; i++) {

a[i] = scanner.nextInt();

}

return a;

}

}

时间: 2024-11-03 01:40:16

Java基础之各种排序算法的相关文章

java实现的集中排序算法

嗯,在经典的排序算法里面,有:冒泡排序,选择排序,插入排序,希尔排序,二叉归并排序,快速排序,堆排序 下面给出java的实现方式,不过快速排序没有搞定,研究中 package net.itaem.sort; /** * 数组排序 * */ public class ArraySorted { /** * 冒泡排序(而且是简单的冒泡排序,应该属于交换排序,不属于经典的冒泡排序) * */ public static void bubble(int[] source){ if(source.leng

java集合提供的排序算法

java集合提供的排序算法 Arrays.sort()排序算法 如果数组长度大于等于286且连续性好的话,就用归并排序,如果大于等于286且连续性不好的话就用双轴快速排序.如果长度小于286且大于等于47的话就用双轴快速排序,如果长度小于47的话就用插入排序. Collection.sort()的排序算法 如果LegacyMergeSort.userRequested为true的话就会使用归并排序 如果不为true的话就会用一个叫TimeSort的排序算法 原文地址:https://www.cn

算法基础——经典八大排序算法的Java及Python实现

概述 八大排序算法不用多说了,程序员算法基础必须要掌握的,现在总结一下加深记忆.下图是这八大排序算法的分类.名称.时间空间复杂度,以及稳定性. 代码 以下是经典八大排序算法的Java及Python代码,都是基于经典算法书籍<算法导论>里的伪代码实现的,我在关键语句部分附上了注释. 按照上图中的顺序分别介绍八大排序算法的实现(升序),前面是Java,后面是Python.Java的排序函数写在了一个类里,Python的排序函数则直接写出来了. 直接插入排序 public class InsertS

[java初探06]__排序算法的简单认识

今天,准备填完昨天没填的坑,将排序算法方面的知识系统的学习一下,但是在简单的了解了一下后,有些不知如何组织学习了,因为排序算法的种类,实在是太多了,各有优略,各有适用的场景.有些不知所措,从何开始. 最后按照常规思路,我将逐次从排序算法的了解,常用的几种排序算法的原理及实现,几种算法的对比以及适用场景.三个方面展开对排序算法的学习. 排序算法的基本了解 在我们学习一样知识,技术之前,首先我们应当对它有一个基本的了解,然后在了解的基础上逐渐深入学习. 在计算机科学与数学中,排序算法(Sorting

Java 中常见的排序算法

  其实小编是不太想写关于java的相关文章,因为是这个编程语言实在是会用的人太多了,网上的博文数不胜数,没必要在重复造轮子了,但是虽然java这门语言会用的人很多,但是会用.掌握.熟练.和精通可不是闹着玩的,想要达到精通的级别,小编敢说,一个正规的开发公司能过达到精通java的开发人员屈指可数,所以小编这里就跳过关于java哪些简单的API .语法,直接给大家介绍一些相对提升能力,并且不是那么基础的知识,说不定以后面试就会用到,尤其是排序,真的,不晓得为啥都喜欢在面试的时候出排序的题,实际大数

[转载]图解程序员必须掌握的Java常用8大排序算法

这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,分享给大家一起学习. 分类1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序) 所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一

(2)Java数据结构--二叉树 -和排序算法实现

=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDecimal类Java API —— BigInteger类Java API —— Calendar类Java API —— DateFormat类Java API —— Date类Java API —— HashMap类 & LinkedHashMap类Java API —— JDK5新特性Java

java SE 常用的排序算法

java程序员会用到的经典排序算法实现 常用的排序算法(以下代码包含的)有以下五类: A.插入排序(直接插入排序.希尔排序) B.交换排序(冒泡排序.快速排序) C.选择排序(直接选择排序.堆排序) D.归并排序 E.分配排序(基数排序) 以下算法都是可以实现的,但是什么情况使用什么算法都是根据实际情况选用的. 如果有用的话就顶起吧,谢谢. import java.util.ArrayList; import java.util.List; public class Sort { // test

JAVA基础-数组的排序(选择排序和冒泡排序),总结精辟!!!

1.-------寄语 对于初学JAVA的同学来说,排序是在陌生不过的一个基础题了.但是由于自己刚刚步入学习JAVA的世界,很多东西不能很好的理解,导致自己虽然可以敲出代码或者大致能够想明白, 但是对于解决问题的思想并没有很好的深入.(其实一开始学习也没必要太刨根问底,等到自己有一定的基础了,有时间了再研究一下.抱着研究的态度感觉会更好一点.其实大部分目前的 开发者都是经过了一段时间的培训,在培训的过程中,课程速度特别快,有时候我们必须要“不拘小节”,掌握培训中的主流知识才是明智之举.如果你正在