比较常见的算法:冒泡排序、选择排序、插入排序、快速排序。具体实现如下:
public class SortUtil { public static void main(String[] args) { int[] a={32,12,3,45,31,30,5,1,40}; //InsertSort(a); //BubbleSort(a); //SelectSort(a); QuickSort(a, 0, a.length-1); printData(a); } /** * 快速排序 * @param a * @param low * @param high */ public static void QuickSort(int[] a,int low,int high){ if(low < high){ int middle = GetMiddle(a, low, high); QuickSort(a, 0, middle-1); QuickSort(a, middle+1, high); } } /** * 获取分隔下标 * @param a * @param low * @param high */ public static int GetMiddle(int[] a,int low,int high){ if(low < high){ int temp = a[low]; while(low<high){ while(low < high && temp < a[high]){ high--; } a[low]=a[high]; while(low<high && temp > a[low]){ low++; } a[high]=a[low]; } a[low]=temp; } return low; } /** * 选择排序 * 原理:一种简单直观的排序方法,每次寻找序列中的最小值,然后放在最开始的位置。 * 1)在未排序数组中找到最小元素,存放到排序序列的起始位置; * 2)再从剩余的未排序的数组中继续寻找最小的元素,然后放到排序数组的末尾; * 3)以此类推,直到数组所有元素排序完毕。 * @param a */ public static void SelectSort(int[] a){ for(int i=0;i<a.length-1;i++){ int min=a[i]; int index = i; for(int j=i+1;j<a.length;j++){ if(min > a[j]){ min=a[j]; index=j; } } int temp = a[index]; a[index]=a[i]; a[i]=temp; } } /** * 冒泡排序 * 比较相邻的两个元素,如果第一个比第二个大,则交换两个元素的位置 * 对每一对相邻的元素做如上的操作,比较结束后,最大的元素会被移动到最后。 * 再次遍历时,最后一个元素不用参与比较了,此时数组的长度减1, * 针对剩余的元素重复上述步骤,直到剩余数组的长度为0; * @param a */ public static void BubbleSort(int[] a){ for(int i=0;i<a.length-1;i++){ for(int j=0;j<a.length-1-i;j++){ if(a[j]>a[j+1]){ int temp = a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } /** * 插入排序 * 原理:通过构建有序数据,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 * 1)默认该数组已经是有序的; * 2)从下标1开始,取出下标1的值,在已排序的数组中,从当前下标开始,从后向前扫描; * 3)如果该元素小于新元素,将新元素向后移动一个位置; * 4)重复步骤3,直到找到该元素大于新元素或已扫描到开始端; * 5)将该元素插入到新位置中; * 6)下标加1,重复步骤2; * @param a */ public static void InsertSort(int[] a){ for(int i=1;i<a.length;i++){ int j=i; int min=a[i]; while(j>0 && min < a[j-1]){ a[j]=a[j-1]; j--; } a[j]=min; } } /** * 打印数组 * @param a */ private static void printData(int[] a){ for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println(); } }
相关推荐
排序算法复习大全(Java 实现) 本文档旨在详细介绍排序算法的各种实现方式,包括插入排序、冒泡排序、选择排序、Shell 排序和快速排序等,所有算法都使用 Java 语言实现。本文档首先引入了一个基础类 Sorter,用于...
快速排序算法复习.md
主要有直接插入排序,选择排序,冒泡排序,二分排序,shell排序等等
综上所述,算法复习资料涵盖了IT领域的诸多重要概念,包括但不限于数据结构、排序算法、搜索算法、图论、动态规划以及问题求解策略。通过深入学习和实践,你可以提升自己的编程能力,更好地应对复杂的编程挑战。
分治法在许多重要算法中扮演了关键角色,如折半查找、合并排序、快速排序等,这些算法不仅展示了分治法的威力,也证明了其在解决大规模问题时的高效性。 #### 减治法:逐步逼近最优解 减治法是一种迭代减少问题...
本复习题主要涵盖了排序算法的基础知识和常见类型,旨在帮助学习者巩固和深化对排序算法的理解。** 在数据结构中,排序算法通常分为内部排序(数据量较小,可在内存中完成)和外部排序(数据量巨大,需要借助磁盘等...
在这个“数据结构复习.zip”压缩包中,你可能会找到一系列关于排序算法和其他基础算法的资料,这对于复习和深入理解这些概念非常有帮助。 首先,让我们详细讨论一下数据结构。数据结构是组织和存储数据的方式,它...
在计算机科学领域,排序算法是数据结构中至关重要的一部分,它涉及到如何有效地重新排列一组数据,使其按照特定顺序存储。...对于编程初学者或想要复习排序算法的开发者来说,这是一个非常实用的工具。
2. 排序与搜索算法:包括各种排序算法如冒泡排序、选择排序、插入排序、快速排序、归并排序等,以及二分搜索等搜索算法。 3. 动态规划:作为一种算法设计技巧,动态规划在解决具有重叠子问题和最优子结构特征的问题...
### Java基础复习笔记11基本排序算法 #### 内容概览 本文档主要介绍了Java中的几种基本排序算法,包括冒泡排序、快速排序、选择排序、堆排序等,并通过具体的代码实例对每种排序算法进行了详细的解释。文档旨在...
- **定义**:快速排序是一种高效的排序算法,采用分治法策略来把一个序列分为较小和较大的两个子序列。 - **核心思想**:选择一个基准值,将序列分为比基准值小和比基准值大的两个部分,然后递归地对这两部分进行...
这一章节不仅讲解了折半搜索的原理,还可能涉及更广泛的排序算法,如快速排序、归并排序等,这些算法是数据处理和数据库管理中的关键技术。 ### 七、STL中的向量与表 STL(标准模板库)提供了一系列高性能的数据...
希尔排序是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数组元素按照一定的间隔分组,然后对每组进行插入排序,随着间隔逐渐减小,直到间隔为1时,整个数组成为一个组,...
**算法与程序设计VB排序复习概述** 排序是计算机科学中基础且重要的问题,尤其是在数据...总结,这份PPT课件提供了关于冒泡排序和选择排序的全面复习,涵盖了理论、实践和优化,是学习和巩固VB排序算法的良好资源。
复习数据结构,随手写了几个排序算法。由于时间仓促,还有归并排序,基数排序和堆排序没有完成。希望谅解。我会尽快补上!
总结来说,对于NOIP初赛复习阶段,理解并掌握这些排序算法的基本原理及其实现方式非常重要。此外,对于不同规模的数据集,合理选择合适的排序算法也是非常关键的。对于大数据集,应优先考虑使用快速排序等高效算法。
本书《更多Windows白话经典算法之七大排序第2版》是一部深入浅出讲解七种经典排序算法的著作,旨在帮助读者理解并掌握冒泡排序、直接插入排序、直接选择排序、希尔排序、归并排序、快速排序以及堆排序等基本概念和...
2)递归求解:通过递归调用快速排序算法,分别对 a[p:q-1]和 a[q+1:r]进行排序。3)合并:由于对 a[p:q-1]和 a[q+1:r]的排序是就地进行的,所以在 a[p:q-1]和 a[q+1:r]都已排好的序后不需要执行任何计算,a[p:r]就已...
在当今的数据处理和分析领域,排序算法无疑是一项基础且核心的技术。排序算法的性能直接影响到数据处理的效率,因此掌握不同类型的排序算法具有重要的意义。尤其是对于Python这样的编程语言,它不仅简洁易学,而且在...