`

Java排序问题(二)

阅读更多

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
 * 
 * 
 */
}

 

  • 大小: 67.4 KB
分享到:
评论

相关推荐

    java排序.txt

    ### 二、Java排序算法介绍 #### 1. 直接插入排序(Direct Insertion Sort) - **定义**:直接插入排序是一种简单的排序方法,它的工作原理是将一个记录插入到已排序好的有序表中,从而得到一个新的、记录增1的有序...

    java排序问题

    用java语言排序问题

    java中文排序,数字字母汉字排序

    在Java编程语言中,对包含中文、数字和字母的数据进行排序是一项常见的任务。这个场景下,我们关注的是如何实现一个自定义的排序规则,按照数字、字母和汉字的顺序进行排列。以下是对这一主题的详细解释。 首先,...

    java代码-使用java解决java排序之-快速排序的问题的源代码

    java代码-使用java解决java排序之-快速排序的问题的源代码 ——学习参考资料:仅用于个人学习使用!

    java冒泡排序、快速排序、二分查找

    Java 中的排序算法包括冒泡排序、快速排序等,而查找算法则有二分查找等。这些算法都是 Java 开发中非常重要的基础知识。本文将对冒泡排序、快速排序、二分查找进行详细的分析和图解。 冒泡排序 冒泡排序是一种...

    java_二维数组冒泡行列排序源代码

    使用冒泡排序实现的java语言编写的关于二维数组的排序,实现了行、列的排序输出。

    Java排序算法大全

    Java排序算法大全是一份专为Java开发者准备的学习资源,涵盖了各种经典的排序算法,旨在帮助初学者和有经验的程序员深入理解排序的原理和实现。排序是计算机科学中的基础且重要的概念,它在数据处理、数据库操作、...

    面向对象java排序包

    【面向对象Java排序包】是基于Java编程语言设计的一个专门用于处理排序问题的软件组件。这个包充分体现了面向对象的设计原则,将数据结构、算法和业务逻辑封装在独立的对象中,提高了代码的可读性和可维护性。它不仅...

    JAVA排序汇总 java应用中一些比较经典的排序算法

    【JAVA排序汇总】Java编程语言中,排序是数据处理中非常基础且重要的操作。本文将对几种经典的排序算法进行简要介绍和分析。 1. **插入排序**: 插入排序分为直接插入排序和折半插入排序。直接插入排序是将每个...

    java 中文姓氏 排序

    ### Java 中文姓氏排序详解 #### 一、引言 在处理中文数据时,我们经常需要对含有中文姓名的数据进行排序。Java 提供了多种方式进行排序,包括使用 `Collections.sort()` 方法配合自定义比较器(`Comparator`)。...

    java排序简单介绍

    Java排序是程序开发中常见的一种任务,主要用于对数据集合进行有序排列。在Java中,有多种内置和自定义的排序算法可供选择,每种都有其特定的适用场景和性能特点。下面将详细介绍几种常见的Java排序方法。 1. **...

    java排序大全.txt

    java排序算法大全 为了便于管理,先引入个基础类: 一 插入排序 二 冒泡排序 三,选择排序 四 Shell排序 五 快速排序 六 归并排序 等等

    java排序算法使用及场景说明

    Java 排序算法使用及场景说明 本文档主要介绍了 Java 排序算法的使用和场景说明,包括了五个实践场景的解决方案。 Scenario 1: 找出两个文件共同的 URL 在这个场景中,我们有两个文件 a 和 b,每个文件中存放了 ...

    Java 实现ip 地址排序

    Java ip 地址排序Java ip 地址排序Java ip 地址排序Java ip 地址排序

    文件读出数组进行选择排序和二分查找(java)

    在Java编程中,文件读取、数组操作、选择排序以及二分查找是常见的编程任务,它们涉及了IO流、数据结构和算法等多个方面。以下是这些知识点的详细解释: 1. **文件读取**:Java提供了丰富的IO流类库用于读取文件。...

    JAVA 8种排序介绍及实现

    在编程领域,排序算法是基础且重要的数据处理技术。...学习和掌握这些排序算法能帮助我们更好地理解和解决实际问题。在实际开发中,我们通常会根据数据规模、稳定性、空间复杂度等因素选择合适的排序算法。

    Java排序算法实现

    Java排序算法实现 Java排序算法实现 Java排序算法实现

    Java 选择排序 算法

    Java选择排序算法是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。这种算法对列表中的数据进行了一次完整...

    java 将二维数组顺时针,逆时针排序

    总之,理解和实现二维数组的顺时针和逆时针排序是Java编程中的一个重要技能,它涉及到数组操作、排序算法以及问题解决策略等多个方面。通过熟练掌握这些知识,开发者可以在处理复杂数据结构时更加游刃有余。

Global site tag (gtag.js) - Google Analytics