public class MySort { public static void main(String[] args) { int[] arr = { 5, 7, 6, 8,9, 1, 3, 2, 4, 10 }; //selectSort(arr); //bubbSort1(arr); //inserSort(arr); quickSort(arr,0,arr.length-1); show(arr); } public static void show(int [] arr){ for (int i : arr) { System.out.print(i+"\t"); } System.out.println(""); } //冒泡排序:每次要输出的元素都与剩余的元素做比较,以确保每次输出的都是最小值 public static void bubbSort1(int arr[]){ //第一层循环从第一个元素开始,到倒数第二个元素 for(int i=0;i<arr.length-1;i++){ //从当前一个要输出的元素后面的第一个开始到最后一个元素逐个输出 for(int j=i+1;j<arr.length;j++){ //如果当要输出的元素大于后面的元素,则将它们进行交换 if(arr[i]>arr[j]){ int temp=arr[j]; arr[j]=arr[i]; arr[i]=temp; } } } }; //冒泡排序2:每次把两个相邻的元素作比较,如果第一个元素大于第二个元素,则将他们交换,以确保最后的一个元素为本次循环的最大值。 public static void bubbSort2(int arr[]) { //每次产生一个最大值,因此要循环数组的.length次 for (int i = 1; i <= arr.length; i++) { //此时遍历的数组的长度要减去已经排好的元素个数 for (int j = 0; j < arr.length - i; j++) { if (arr[j] > arr[j + 1]){ int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }; //选择排序:遍历数组的过程中,将最小元素和要输出元素交换,保证当前输出元素为最小元素; public static void selectSort(int arr[]) { for (int i = 0; i < arr.length; i++) { //默认为当前元素的下标为最小元素下标 int min = i; //输出后面的所有元素 for (int j = i + 1; j < arr.length; j++) { //和当前最小值做比较,如果小于最小值,则将最小值的下标为当前元素的下标 if (arr[j] < arr[min]) { min = j; } } //如果最终的最小元素下标不是初始最小元素的下标,则将其交换 if (i != min) { int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } } //插入排序:默认只含第一个元素的序列是有序的,逐个将后面的元素插入序列中,并保证新的序列有序 public static void inserSort(int arr []){ //从第二个元素开始逐个插入 for(int i=1;i<arr.length;i++){ int j=i-1,temp=arr[i]; //从有序的最后一个元素开始,到第一个元素,如果大于要插入的元素,则将其后移 while(j>=0 && arr[j]>temp){ arr[j+1]=arr[j]; j--; } //找到第一个小于插入元素的元素后面插入 arr[j+1]=temp; } } //快速排序,记录无序数组的第一个元素的下标left,以及最后一个元素right; //默认第一个元素为中间元素,后通过右下标往左移动,左下边往右移动,找到中间位置,插入第一个元素;插入元素左右边若还有元素,则重新采用此原则,继续排序 public static void quickSort(int arr [],int left,int right){ //默认初始化第一个中间数在第一个位置 int mid=arr[left]; //声明两个临时变量记录左右下标的移动 int l=left; int r=right; while(l<r){ //从右边开始找,如果大于中间数则继续往左移动,其中l<r为防止左右下标重叠 while(arr[r]>mid && l<r){ r--; } if(l<r){ //找到一个小于中间数的元素,将其值赋给左边 arr[l]=arr[r]; } //从左边开始找,如果小于中间数则继续往右移动,其中l<r为防止左右下标重叠 while(arr[l]<mid && l<r){ l++; } if(l<r){//找到一个大于中间数的元素,将其值赋给右边 arr[r]=arr[l]; } } //此时,左右两边的下标聚集,即r=l,保存中间元素的位置 arr[r]=mid; show(arr); //如果中间数左边还有元素,继续排序 if(left<r-1){ quickSort(arr,left,r-1); } //如果中间数右边还有元素,继续排序 if(r+1<right){ quickSort(arr,r+1,right); } } }
相关推荐
以上就是Java中常用的几种数组排序算法及其实现。每种排序算法都有其特定的适用场景和性能特点,理解并掌握这些排序算法有助于我们在实际编程中选择合适的排序方法,提高程序的效率。在实际应用中,还可以考虑使用...
3. **递归排序**:对基准左右两边的子数组分别进行快速排序,这个过程一直持续到子数组只有一个元素,排序结束。 在实际应用中,选择基准的方式会影响快速排序的效率。常见的方法有以下几种: - **首尾取中法**:取...
本文将总结C语言中几种常用的数组排序方法,并进行基本思想、排序过程、代码实现的分析和比较。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换位置,使得每个...
### PHP中的数组排序算法 在PHP编程中,对数组进行排序是常见的操作之一。本文将详细介绍几种常用的排序算法实现,并通过具体的PHP代码示例来帮助理解这些算法的工作原理。 #### 插入排序(Insertion Sort) 插入...
在C#编程语言中,数组排序是常见的操作,可以用于处理各种数据结构和算法问题。以下将详细讲解几种常见的排序算法及其在C#中的实现。 ### 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,通过重复遍历...
它首先将数组分成几个子数组,对每个子数组进行插入排序,然后再逐步缩小子数组的长度,直到最终变为1,此时整个数组就是有序的了。 **算法步骤:** 1. **初始化:** 定义一个增量序列t1, t2, …, tk, 其中ti > tj, ...
在本文中,我们主要通过几种不同的排序函数来了解PHP数组排序的方法。 首先,我们需要了解如何使用PHP创建数组。PHP提供了多种创建数组的方式,其中一种常用的方法是使用 `range()` 函数。`range()` 函数可以快速...
其中最基础的几个包包括: 1. `java.lang`:这个包是默认导入的,包含了所有Java程序都需要的基本类,如`Object`、`String`、`System`等。`Object`是所有类的父类,`String`用于处理文本,`System`提供系统级的服务...
以上介绍了数组中常用的几种方法及其应用示例。这些方法能够帮助开发者更高效地处理数组数据,提高代码的可读性和维护性。理解并熟练掌握这些方法,对于前端开发工作来说是非常有帮助的。希望本文能够为你提供一定的...
因此,我们的基本思路可以分为以下几个步骤: - **初始化标志位**:首先确定数组的初始两个元素之间的关系(升序或降序),以此作为整个数组的排序方向。 - **遍历数组**:接着遍历整个数组,检查后续元素是否符合...
此外,还提供了几个选作内容供有兴趣的同学进一步探索: 1. **堆排序** 2. **归并排序** 3. **基数排序** 4. **其他自定义排序算法** #### 排序算法实现与测试 ##### 插入排序 插入排序是一种简单的排序方法,其...
根据给定的信息,本文将详细介绍数据结构中常用的几种排序算法:插入排序(Insertion Sort)、希尔排序(Shell Sort)、冒泡排序(Bubble Sort)、选择排序(Selection Sort)以及快速排序(Quick Sort)。...
函数的工作流程大致分为以下几个步骤: 1. 初始化两个数组`$keysvalue`和`$new_array`,分别用于存放排序后的键值对和最终的排序结果。 2. 遍历原数组`$arr`,根据传入的键名`$keys`提取出键值对,存放到`$...
Java的常用包主要包括以下几个: 1. **java.lang**: 这是最基础的包,包含了所有Java程序都会用到的一些核心类,如String、Integer、System等。无需显式导入,因为它在每个Java源文件中默认都是可见的。 2. **java...
以上就是几种常用的数据排序方法在C语言中的实现。每种算法都有其特点和适用场景:冒泡排序简单直观,但效率较低;插入排序在接近有序的数组中表现良好;选择排序保证了固定的交换次数,但总体效率不高;快速排序则...
本压缩包提供了几个关键的VBA示例,包括行列转置、表格数据到数组、一维数组转二维数组以及单列转多列等操作。下面将详细介绍这些知识点及其应用。 1. **行列转置**: 在Excel中,行列转置是将工作表中的数据从行...
2. **排序法**:将数组排序后,第一个元素是数组的最小值,最后一个元素是最大值。但这种方法的时间复杂度较高,为O(n log n),不适合对效率要求高的场景。 3. **并行计算**:在多核处理器或分布式系统中,可以将...
### 常用排序算法总结 #### 一、冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,直到没有再需要...
冒泡排序是一种简单直观的排序算法,它重复地遍历要排序的数组,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数组的工作是重复地进行直到没有再需要交换,也就是说该数组已经排序完成。 **步骤**:...