`
hunter090730
  • 浏览: 193050 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 交换排序算法之二

    博客分类:
  • java
阅读更多
//(将数组的第一个数作为中间值尔后找出数组中所有比这个中间值(通过循环将值小的与值大的分别进行交换)小的数放在左边,比这
//个中间值大的数放在右边依次下去直至顺序完全正确)
public class QuickSortTest {

/**
* "快速排序法"使用的是递归原理,下面我结合一个例子来说明“快速排序法”的原理。 首先给出一个数组{
* 53,12,98,63,18,72,80,46,32,21},先找到第一个数--53,把它作为中间值,
* 也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。 {21,12,32,
* 46,18,53,80,72,63,98},这样一个数组的排序就变成了两个小数组的排序
* 即53左边的数组和53右边的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确。
* 快速排序说到底是从各自两端(不含两端)向中间查找及相互碰头后取出low(左边的一方)作为中间数的地标从
* 而分成以中间数为地界的左右两个数组,而这两个数组再依次继续用同样的方式继续下去,一直到顺序完全正确
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
// //{5,17,13,42,46,94,55,70};
int[] array = { 53, 12, 98, 63, 18, 72, 80, 46, 32, 21 };//
QuickSortTest qst = new QuickSortTest();
qst.quicksort(array, 0, 9);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
System.out.print(",");
}
}

/*
* n就是将进行快速排序的数组,left和right是你数组被排序的左界和右界. 如果要排序上面那个数组,那么left和right分别0,9
*/

void quicksort(int n[], int left, int right) {
int dp;
if (left < right) {
/*
* 这就是下面要讲到的函数,按照上面所说的,就是把所有小于53的数放到它的左边, ,大的放在右边,然后返回53在整理过的数组中的位置
*/
dp = partition(n, left, right);// 4,0,2,7,6,
// {5,17,13,42,46,94,55,70};
quicksort(n, left, dp - 1);// 边界左边的数组(边界点除外)//4,7
// 这两个就是递归调用,分别整理53左边的数组和右边的数
quicksort(n, dp + 1, right);// 边界左边的数组(边界点除外)//4,
}
}

/**
* @param n 被排序的数组
* @param left 开始排序数组的左下标(index)
* @param right 开始排序数组的右下标
* @return 中间数的座下标
*/
int partition(int n[], int left, int right) {
int low, high, pivot, temp;

pivot = n[left];
low = left - 1;
high = right + 1;
// {5,17,13,42,46,94,55,70};; //
while (low + 1 != high) {// 注意指针的偏移情况
if (n[low + 1] <= pivot) {
low++;
} else if (n[high - 1] > pivot) {
high--;
} else {
temp = n[low + 1];
n[++low] = n[high - 1];
n[--high] = temp;
}
// { 46, 12, 21, 32, 18, 53, 80, 72, 63, 98 } // 第一次取出中间数地标的结果{46,12,21,32,18,53,80,72,63,98,low point=5 high
// point=6}
System.out.println("");
}
n[left] = n[low];
n[low] = pivot;
populate(n);
// System.out.print("low point="+low+" high point="+high);
return low;
}

void populate(int[] n) {
for (int i = 0; i < n.length; i++) {
System.out.print(n[i]);
System.out.print(",");
}
}
}
分享到:
评论

相关推荐

    各种排序算法比较(java实现)

    冒泡排序是最直观的排序算法之一,通过不断交换相邻的逆序元素使较大的元素逐渐“浮”到数组末尾。冒泡排序的时间复杂度为O(n^2),适用于小规模或者基本有序的数据。 6. **桶排序(Bucket Sort)**: 桶排序是一种...

    Java各种排序算法代码.zip

    冒泡排序是最简单的排序算法之一,通过重复遍历待排序的元素列表,比较相邻元素并交换位置,直至列表排序完成。在Java中,冒泡排序通常使用两层循环实现。 2. 插入排序(Insertion Sort): 插入排序通过创建一个...

    Java选择排序算法源码

    本主题将深入探讨Java实现的选择排序算法,这是一种简单直观的排序算法,适合新手学习。 选择排序(Selection Sort)的基本思想是,在未排序的序列中找到最小(或最大)的元素,放到序列的起始位置,然后再从剩余未...

    Java所有排序算法大全

    在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。本文将深入探讨Java中常见的几种排序算法,包括它们的工作原理、优缺点以及如何在实际编程中应用。 首先,我们来看`BubbleSort...

    Java各种排序算法代码

    在编程领域,排序算法是计算机科学中的核心概念,尤其是在Java这样的高级编程语言中。Java提供了丰富的内置库函数,如Arrays.sort(),可以方便地对数组进行排序。然而,理解并掌握各种排序算法对于优化程序性能、...

    常用排序算法java演示

    本文将深入探讨标题"常用排序算法java演示"中涉及的知识点,包括排序算法的原理、Java实现方式以及其在实际应用中的图形演示。 首先,让我们逐一了解几种常见的排序算法: 1. **冒泡排序(Bubble Sort)**:这是一...

    Java各种排序算法_随机数

    交换排序是指通过交换记录的位置来实现排序的算法,常见的交换排序算法有冒泡排序和快速排序。冒泡排序的时间复杂度为 O(n^2),而快速排序的时间复杂度为 O(nlogn)。快速排序是一种高效的排序算法,但它是不稳定的...

    Java各种排序算法代码.

    1. **冒泡排序**:这是一种基础的排序算法,通过不断交换相邻的逆序元素来逐渐把较大的元素推向数组的后部。虽然效率较低,但易于理解。在Java中,冒泡排序通常用两层循环实现。 2. **选择排序**:选择排序每次找出...

    JAVA排序算法集合

    根据给定文件的信息,本文将详细介绍Java中的五种主要排序算法:插入排序、交换排序、选择排序、归并排序以及基数排序。每种排序方法都包括了不同的变体和技术细节。 ### 一、插入排序 #### 1. 直接插入排序 直接...

    Java常用排序算法源码

    在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。排序算法是用来组织和优化数据结构的关键工具,使得数据按照特定规则(如升序或降序)排列。以下是对Java中几种常见排序算法的...

    Java常见排序算法源码集.rar

    1. **冒泡排序(Bubble Sort)**:这是一种简单的排序算法,通过重复遍历待排序的序列,比较相邻元素并根据需要交换它们,直到序列完全排序。虽然效率较低,但其逻辑清晰,易于理解。 2. **选择排序(Selection ...

    Java排序算法大全

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

    数据结构java版 排序算法

    【数据结构与排序算法在Java中的应用】 在计算机科学中,数据结构是组织和存储数据的方式,而排序算法则是对这些数据进行排列的策略。在Java编程中,掌握各种排序算法对于提高程序效率至关重要。本篇文章将深入探讨...

    Java各种排序算法

    ### Java中的常用排序算法 #### 一、概述 在计算机科学中,排序算法是一类非常重要的算法,用于将一组无序的数据按照特定的顺序排列。Java作为一种广泛应用的编程语言,支持多种内置排序方法以及允许开发者自定义...

    Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找

    综上所述,掌握这些排序算法和二分查找技巧对于Java程序员来说至关重要,它们不仅能提升编程能力,也有助于解决实际问题,提高代码的运行效率。通过学习和实践,你将能够更好地应对各种编程挑战。

    Java 选择排序 算法

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

    java版本排序算法

    冒泡排序是最基础的排序算法之一,其工作原理是重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换,也就是说该数列已经排序完成。...

    java实现数据结构常见排序算法及详解

    排序算法是计算机科学中的基础概念之一,主要用于将一系列数据按照特定规则进行排列。根据数据处理方式的不同,排序算法大致分为两大类:比较排序与非比较排序。 #### 比较排序 比较排序是指通过比较两个元素的大小...

    快速排序算法的java实现

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and ...由于快速排序的常数因子较小,且在大多数情况下性能良好,因此它是实践中广泛使用的排序算法之一。

Global site tag (gtag.js) - Google Analytics