4、快速排序
思想:其实上快排思路很简单。尤其是这种简单的数字排序,就是每次把第一个当做标兵;然后士兵A和士兵B分别从数组两端开始走,如果大于标兵则放在左边,小于2标兵则放在右端,一次递归,出来的就是排序好的数列了(和汉诺塔的思想是有点像的)
package Sort; import java.util.Scanner; public class quickSort { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); System.out.println("快速排序:"); System.out.println("请输入一个数组长度,可多次输入:"); while (sc.hasNextInt()) { int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { System.out.println("请输入第" + (i + 1) + "个数;"); arr[i] = sc.nextInt(); } // 快速排序主题 quickSort sort = new quickSort(); sort.quickSort(arr, 0, n - 1); System.out.println("输出排序后的数组:"); for (int j = 0; j < n; j++) { System.out.print(arr[j] + " "); } System.out.println(); } } // 划分数组 int partion(int[] arr, int p, int r) { int x = arr[r]; int i = p - 1;// 注意这点,把i设成负值,然后作为移动的标志 int j; for (j = p; j < r; j++) { if (arr[j] <= x) { i++; int temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } int temp = arr[j]; arr[j] = arr[i + 1]; arr[i + 1] = temp; return i + 1;// 返回的应该是交换后的哨兵的位置 } // 递归解决每个划分后的小数组 void quickSort(int[] arr, int p, int r) { if (p < r) { int q = partion(arr, p, r); quickSort(arr, p, q - 1); quickSort(arr, q + 1, r); } } }
5、希尔排序
思想:输入一个数组,把这二个数组分成多个小的数组,进行排序,第一次取数组的二分之一t=length/2,然后就是a[t]和a[t-t]进行比较大小,依次增加,一直到a[length-1];第二部是t=t/2重复上一步的步骤,依次递推下去,知道t==1;输出的新数列就是排序好的数列了。
package Sort; import java.util.Scanner; public class shellSort { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); System.out.println("希尔排序:"); System.out.println("输入一个数组长度,可多次输入:"); while (sc.hasNextInt()) { int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { System.out.println("请输入第" + (i + 1) + "个数;"); arr[i] = sc.nextInt(); } // 希尔排序主题 //调用shellSort函数 shellSort ss = new shellSort(); ss.shellsort(arr); System.out.println("排序后:"); for (int k = 0; k < n; k++) { System.out.print(arr[k] + " "); } System.out.println(); } } //shellSort函数 public void shellsort(int[] arr) { int temp = 0; int j = 0; for (int t = arr.length / 2;t > 0; t /= 2) { for (int i = t; i < arr.length; i++) { temp = arr[i]; for (j = i; j >= t; j -= t) { if (temp <arr[j - t]) { arr[j] = arr[j - t]; } else { break; } } arr[j] = temp; } } } /** * 6 5 2 3 1 4 0 * * */ }
相关推荐
JAVA排序汇总JAVA排序汇总JAVA排序汇总
java排序 java 排序 排序大全 算法 java算法
java排序.txt
用java语言排序问题
java代码-使用java解决java排序之-快速排序的问题的源代码 ——学习参考资料:仅用于个人学习使用!
图解详细分析,java冒泡排序、快速排序、二分查找
java实现的常用的几种基本排序算法,插入、交换、选择、归并
使用冒泡排序实现的java语言编写的关于二维数组的排序,实现了行、列的排序输出。
java实现中文排序,按数字字母汉字的顺序进行排序
java排序算法使用及场景说明 文档后面有一些别人的链接,多在google上搜索Java排序算法,及维基百科上面也有很全的算法介绍。
java排序算法大全 为了便于管理,先引入个基础类: 一 插入排序 二 冒泡排序 三,选择排序 四 Shell排序 五 快速排序 六 归并排序 等等
Java ip 地址排序Java ip 地址排序Java ip 地址排序Java ip 地址排序
Java 中的一些重要排序,比如冒泡,直接插入排序
Java排序方法详解大全 Java排序 快速排序 冒泡排序
Java排序算法实现 Java排序算法实现 Java排序算法实现
java排序,简单介绍了java的主要有那些排序方法。
java排序方法 java排序方法 java排序方法 java排序方法
java 中文姓氏 排序
JAVA排序汇总,java应用中一些比较经典的排序算法
Java基础知识: 冒泡排序详解,简单而详细的讲清楚了,什么是冒泡排序。 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如...