插入排序
算法描述
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置中
- 重复步骤2~5
如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。
写道 插入排序
public class Insertion {
public static void insertionSort(Comparable []data){
for(int index=1;index<data.length;index++){
Comparable key = data[index];
int position = index;
//shift larger values to the right
while(position>0&&data[position-1].compareTo(key)>0){
data[position] = data[position-1];
position--;
}
data[position]=key;
}
}
public static void main(String []args){
Comparable []c={4,9,23,1,45,27,5,2};
insertionSort(c);
for(int i=0;i<c.length;i++)
System.out.println("插入排序:"+c[i]);
}
}
选择排序
算法描述
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
写道
public void selectionSort(int data[], int count)
{
int i, j, min, temp;
for (i = 0; i < count - 1; i++) {
/* find the minimum */
min = i;
for (j = i+1; j < count; j++)
if (data[j] < data[min])
min = j;
/* swap data[i] and data[min] */
temp = data[i];
data[i] = data[min];
data[min] = temp;
}
}
并归排序
算法描述
归并操作的过程如下:
- 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
- 设定两个指针,最初位置分别为两个已经排序序列的起始位置
- 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
- 重复步骤3直到某一指针达到序列尾
- 将另一序列剩下的所有元素直接复制到合并序列尾
写道
public int[] Two_Way_Merge_Sort(int[] arrayA, int[] arrayB) {
int[] resultC = new int[arrayA.length + arrayB.length];
int k = 0;
int i = 0;
int j = 0;
while(i < arrayA.length && j < arrayB.length) {
if (arrayA[i] < arrayB[j])
resultC[k++] = arrayA[i++];
else
resultC[k++] = arrayB[j++];
}
while (i < arrayA.length)
resultC[k++] = arrayA[i++];
while (j < arrayB.length)
resultC[k++] = arrayB[j++];
return resultC;
}
分享到:
相关推荐
例如,对于小规模数据,简单排序算法可能就足够了;而对于大规模数据,高效的排序算法如快速排序或归并排序会更合适。同时,现代Java库(如`Arrays.sort()`方法)通常使用更高级的排序算法,如TimSort,它结合了稳定...
例如,对于小规模数据,简单排序算法可能就足够了;而对于大规模数据,快速排序或归并排序可能是更好的选择。 了解并掌握这些排序算法,不仅可以提高代码效率,也有助于培养分析问题和解决问题的能力。在编程竞赛或...
在Java编程语言中,排序是数据处理中非常基础且重要的操作。本文将深入探讨四种基本的排序算法:冒泡排序、插入排序、选择排序和快速排序。这些算法各有特点,适用于不同的场景,理解它们的工作原理有助于提升编程...
在编程领域,数组排序是基础且重要的操作,尤其是在Java中。本篇文章将深入探讨四种基本的排序算法:冒泡排序、选择排序、插入排序以及希尔排序,并结合递归算法的复杂度进行分析。这些排序算法在不同的场景下有不同...
根据提供的文件信息,我们可以归纳出以下关于Java排序的相关知识点: ### 一、文件基本信息 - **文件名**:`java排序.txt` - **文件描述**:该文本文件主要介绍了几种常用的Java排序算法,并通过示例代码展示了...
以上三个知识点总结了关于 Java 排序的一些基本应用,包括基础的冒泡排序算法、使用标准库 `Collections.sort()` 进行排序以及使用 `RuleBasedCollator` 实现国际化排序等。这些技术对于编写高效、可维护的 Java ...
总结来说,Java集合框架提供了强大的工具来处理分组和排序,包括`List`接口的`sort()`方法和流API的`groupingBy()`和`sorted()`。在实际项目中,可以根据需求选择合适的方法。同时,`ArrayHelp`和`ClassLoadUtil`...
在编程领域,排序算法是计算机科学中的重要组成部分,特别...排序总结文件可能会包含这些算法的比较分析、性能测试以及如何根据具体情况选择合适算法的指导。理解和掌握这些排序算法对于提升Java程序员的技能至关重要。
例如,对于小规模数据,简单排序如冒泡或插入排序可能就足够了;而对于大规模数据,快速排序、归并排序或堆排序更为合适。了解和掌握这些排序算法的原理和Java实现,能帮助我们更好地解决实际问题,提高代码性能。...
这份文档名为“java排序总结.pdf”,是一份关于Java中常用排序算法的总结资料。文档中详细介绍了三种基本的排序方法:冒泡排序(Bubble Sort)、选择排序(Selection Sort)和插入排序(Insertion Sort),并提供了...
从给定的文件信息中,我们可以提炼出关于Java中几种主要排序算法的详细知识点,包括插入排序、希尔排序、选择排序、堆排序以及交换排序。下面将深入探讨这些排序算法的特点、工作原理以及它们的稳定性与时间复杂度。...
### Java冒泡排序方法详解 #### 一、冒泡排序简介 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到...
### JAVA排序算法总结 在计算机科学领域,排序算法是数据处理和分析中极其重要的组成部分,尤其是在使用Java语言进行开发时。本文将针对常用的几种排序算法进行详细的总结与解析,包括它们的基本原理、时间复杂度、...
下面是一个简单的Java代码示例,用于对一个整型数组进行升序排序: ```java public class BubbleSort { public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i ; i++) { for (int...
### 插入排序Java代码详解 #### 一、插入排序简介 插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,...
总结一下,Java插入排序是通过创建一个`InsertionSort`类,定义一个`sort`方法,对给定的一维整型数组进行逐个元素的比较和移动,从而达到排序的目的。这种方法直观易懂,但效率较低,适合于小规模或基本有序的数据...
### Java排序方法面试知识点详解 在Java编程领域中,排序算法是面试中常见的技术考察点之一。本篇文章将深入分析几种基本的排序算法,并通过具体的Java代码示例来阐述每种算法的特点及其应用场景。 #### 1. 插入...
2. **简单选择排序**: - **平均情况时间复杂度**:O(n^2) - **最好情况时间复杂度**:O(n^2) - **最坏情况时间复杂度**:O(n^2) - **辅助空间复杂度**:O(1) - **稳定性**:不稳定 - **原理**:通过遍历未...
### Java版本排序算法详解 #### 插入排序 插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。在Java中,我们可以创建一个`...
### JAVA冒泡排序算法详解 冒泡排序是一种简单的排序算法,它重复地遍历要排序的元素列表,比较每对相邻元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复进行的,直到没有再需要交换的元素,也就是...