一、 划分算法描述
1. 划分就是将数据项分成两组,一组大于某个特定的数据项,而另一组小于某个特定的数据项。在划分算法中,这个特定的数据项叫做枢纽。
2. 如下图所示:划分算法的思想是:中间的横线代表枢纽;数据项的左端和右端分别有两个指针(leftPtr和rightPtr);leftPtr从左向右遍历元素,rightPtr从右向左遍历元素,当leftPtr遇到比枢纽元素大的元素时停止,当rightPtr遇到比枢纽元素小的元素时停止,然后将这两个元素交换位置;接下来,leftPtr继续向右遍历,rightPtr继续向左遍历,重复上面的操作;当两个指针相遇时遍历结束。
二、 Java语言描述划分算法
package com.solid.sort;
public class Partition {
//定义数组
private int[] arr;
private static int nElems;
/**
* 构造方法
* @param maxSize
*/
public Partition(int maxSize) {
arr = new int[maxSize];
nElems = 0;
}
/**
* 数组中插入元素
* @param key
*/
public void insert(int key) {
arr[nElems++] = key;
}
/**
* 遍历数组中的所有元素
*/
public void display() {
for(int i=0; i<nElems; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
/**
* 划分算法
* @param left
* @param right
* @param pivot
* @return
*/
public int partitionIt(int left, int right, int pivot) {
int leftPtr = left - 1;
int rightPtr = right + 1;
while(true) {
while(leftPtr < right && arr[++leftPtr] < pivot)
;
while(rightPtr > left && arr[--rightPtr] > pivot)
;
if(leftPtr >= rightPtr) {
break;
} else {
int temp = arr[leftPtr];
arr[leftPtr] = arr[rightPtr];
arr[rightPtr] = temp;
}
}
return leftPtr;
}
/**
* 测试main方法
* @param args
*/
public static void main(String[] args) {
Partition partition = new Partition(100);
partition.insert(15);
partition.insert(30);
partition.insert(65);
partition.insert(70);
partition.insert(18);
partition.insert(75);
partition.insert(55);
partition.insert(40);
partition.display();
System.out.println("pivot at index:" + partition.partitionIt(0, nElems-1, 50));
partition.display();
}
}
分享到:
相关推荐
2. **高级排序算法**:这部分通常涉及如快速排序或归并排序等更高效的算法,它们的时间复杂度为O(Log2(N))。这些算法利用分治策略,将大问题分解为小问题解决,从而显著提高了排序效率。 3. **独特算法**:尽管这些...
快速排序和冒泡排序是两种常见的排序算法,它们在计算机科学中扮演着重要的角色,特别是在数据处理和优化程序性能方面。...同时,这也为我们提供了深入学习其他高级排序算法,如归并排序、堆排序等的基础。
在编程领域,排序算法是数据处理的核心部分,尤其是在C++这样的高级编程语言中。本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并...
在计算机科学中,排序算法是数据处理的重要组成部分,它们用于将一组无序的数据按照特定顺序...通过对冒泡排序、选择排序和快速排序的学习,可以提升对算法设计和分析的能力,为后续更高级的算法学习打下坚实的基础。
在计算机科学领域,排序是数据处理的一个...在实际编程中,常常会结合使用多种排序算法,或者使用高级编程语言提供的内置排序功能,如C++的`std::sort`或Python的`sorted`函数,这些通常已经优化过,能够适应多种情况。
二、高级排序算法 1. 堆排序:利用堆这种数据结构进行排序,可以在O(n log n)的时间内完成。堆是一种近似完全二叉树的结构,可以快速找到最大(最小)元素。 2. 计数排序:非基于比较的排序算法,适用于数值范围...
按问题类型分类,算法可以划分为排序算法、查找算法、字符串处理算法、图问题算法、组合问题算法、几何问题算法和数值问题算法等。而按算法内在设计逻辑分类,主要包括蛮力法、分治法、减治法、变治法、时空权衡、...
在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。排序算法是用来组织和优化数据结构的关键工具,它可以帮助我们快速查找、分析和处理大量数据。本篇将深入探讨Java中实现的几种...
根据给定的信息,本文将详细介绍几种在C#中实现的基本排序算法,包括快速排序、冒泡排序、选择排序...同时,通过对这些基础排序算法的学习和实践,可以加深对数据结构和算法的理解,为更高级的算法学习打下坚实的基础。
在编程领域,排序算法是计算机科学中的核心概念,特别是在数据处理和分析中起着至关重要的作用。本资源提供了各种排序算法...同时,了解这些基础排序算法也有助于进一步研究更高级的排序算法,如计数排序、基数排序等。
在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。排序算法是用来组织和优化数据结构的关键工具,使得数据按照特定顺序排列。以下是对标题和描述中提到的一些常用Java排序算法的...
因此,虽然直接插入排序简单,但效率不如其他高级排序算法,如归并排序和快速排序。 总的来说,理解各种排序算法的原理、特性以及它们在不同场景下的适用性,对于优化数据处理和提升程序性能至关重要。在实际应用中...
在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。排序算法是用来组织和优化数据结构的关键工具,使得数据按照特定顺序排列。本资源包含了一系列的Java实现的排序算法,旨在帮助...
快速排序通过划分和递归,能处理大规模数据;归并排序采用分治策略,稳定且适用于各种情况;堆排序利用堆这种数据结构实现,能在原地排序,但不稳定。 学习Java中的数据结构和算法,建议按照以下路线进行: 1. 先...
在编程领域,排序算法是计算机科学的基础之一,尤其是在Java编程中...同时,还可以探索其他高级排序算法,如归并排序、堆排序等,以进一步提升编程技能。总之,掌握Java排序算法对于成为一名优秀的Java开发者至关重要。
通过这次实验,你不仅理解了这三种排序算法的基本原理,还掌握了如何用高级语言实现它们。实验过程中可能遇到的挑战包括理解和实现算法、调试代码以及性能分析。这些经验对后续学习和实际应用排序算法有着重要的指导...
归并排序(Merge Sort)是一种基于分治策略的高效排序算法,它的主要思想是将大问题分解成小问题,然后逐个解决小问题,最后再将解决好的小...理解和掌握归并排序对于理解计算机科学中的分治法和其他高级算法至关重要。
在IT领域,理解和掌握基本数据结构、排序算法以及算法学习工具是至关重要的。这些基础知识构成了计算机科学的基础,并在大数据分析、数据挖掘等实际应用中扮演着核心角色。 首先,我们来探讨基本数据结构。数据结构...
在编程领域,排序算法是计算机科学中的核心概念,特别是在Java这样的高级编程语言中。排序算法是用来组织和优化数据结构的关键工具,使得数据按照特定顺序排列。以下是对标题和描述中涉及的Java排序算法的详细解释:...
以上就是对这十五个经典算法的概述与总结。每个算法都有其独特的应用场景和价值,通过学习这些算法,不仅可以提升编程能力,还能更好地理解和解决实际问题。希望这些内容能够帮助读者深入理解这些算法,并在实际工作...