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排序算法介绍 #### 1. 直接插入排序(Direct Insertion Sort) - **定义**:直接插入排序是一种简单的排序方法,它的工作原理是将一个记录插入到已排序好的有序表中,从而得到一个新的、记录增1的有序...
用java语言排序问题
在Java编程语言中,对包含中文、数字和字母的数据进行排序是一项常见的任务。这个场景下,我们关注的是如何实现一个自定义的排序规则,按照数字、字母和汉字的顺序进行排列。以下是对这一主题的详细解释。 首先,...
java代码-使用java解决java排序之-快速排序的问题的源代码 ——学习参考资料:仅用于个人学习使用!
Java 中的排序算法包括冒泡排序、快速排序等,而查找算法则有二分查找等。这些算法都是 Java 开发中非常重要的基础知识。本文将对冒泡排序、快速排序、二分查找进行详细的分析和图解。 冒泡排序 冒泡排序是一种...
使用冒泡排序实现的java语言编写的关于二维数组的排序,实现了行、列的排序输出。
Java排序算法大全是一份专为Java开发者准备的学习资源,涵盖了各种经典的排序算法,旨在帮助初学者和有经验的程序员深入理解排序的原理和实现。排序是计算机科学中的基础且重要的概念,它在数据处理、数据库操作、...
【面向对象Java排序包】是基于Java编程语言设计的一个专门用于处理排序问题的软件组件。这个包充分体现了面向对象的设计原则,将数据结构、算法和业务逻辑封装在独立的对象中,提高了代码的可读性和可维护性。它不仅...
【JAVA排序汇总】Java编程语言中,排序是数据处理中非常基础且重要的操作。本文将对几种经典的排序算法进行简要介绍和分析。 1. **插入排序**: 插入排序分为直接插入排序和折半插入排序。直接插入排序是将每个...
### Java 中文姓氏排序详解 #### 一、引言 在处理中文数据时,我们经常需要对含有中文姓名的数据进行排序。Java 提供了多种方式进行排序,包括使用 `Collections.sort()` 方法配合自定义比较器(`Comparator`)。...
Java排序是程序开发中常见的一种任务,主要用于对数据集合进行有序排列。在Java中,有多种内置和自定义的排序算法可供选择,每种都有其特定的适用场景和性能特点。下面将详细介绍几种常见的Java排序方法。 1. **...
java排序算法大全 为了便于管理,先引入个基础类: 一 插入排序 二 冒泡排序 三,选择排序 四 Shell排序 五 快速排序 六 归并排序 等等
Java 排序算法使用及场景说明 本文档主要介绍了 Java 排序算法的使用和场景说明,包括了五个实践场景的解决方案。 Scenario 1: 找出两个文件共同的 URL 在这个场景中,我们有两个文件 a 和 b,每个文件中存放了 ...
Java ip 地址排序Java ip 地址排序Java ip 地址排序Java ip 地址排序
在Java编程中,文件读取、数组操作、选择排序以及二分查找是常见的编程任务,它们涉及了IO流、数据结构和算法等多个方面。以下是这些知识点的详细解释: 1. **文件读取**:Java提供了丰富的IO流类库用于读取文件。...
在编程领域,排序算法是基础且重要的数据处理技术。...学习和掌握这些排序算法能帮助我们更好地理解和解决实际问题。在实际开发中,我们通常会根据数据规模、稳定性、空间复杂度等因素选择合适的排序算法。
Java排序算法实现 Java排序算法实现 Java排序算法实现
Java选择排序算法是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。这种算法对列表中的数据进行了一次完整...
总之,理解和实现二维数组的顺时针和逆时针排序是Java编程中的一个重要技能,它涉及到数组操作、排序算法以及问题解决策略等多个方面。通过熟练掌握这些知识,开发者可以在处理复杂数据结构时更加游刃有余。