插入排序java原理思路
时间: 2023-11-17 19:57:51 浏览: 34
插入排序是一种简单直观的排序算法,其基本思想是将待排序的元素插入到已经排好序的序列中,从而得到一个新的、更大的有序序列。具体实现过程如下:
1. 从第一个元素开始,该元素可以认为已经被排序;
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
5. 将新元素插入到该位置后;
6. 重复步骤2~5。
Java代码实现如下:
```
public static void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; ++i) {
int key = arr[i];
int j = i - 1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
```
相关问题
插入排序java原理
插入排序是一种简单直观的排序算法,其原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。具体的Java实现如下所示:
```java
import java.util.Arrays;
public class InsertSort {
public static void main(String\[\] args) {
int arr\[\] = {2,1,5,3,6,4,9,8,7};
int temp;
for (int i=1;i<arr.length;i++){
// 待排元素小于有序序列的最后一个元素时,向前插入
if (arr\[i\]<arr\[i-1\]){
temp = arr\[i\];
for (int j=i;j>=0;j--){
if (j>0 && arr\[j-1\]>temp) {
arr\[j\]=arr\[j-1\];
}else {
arr\[j\]=temp;
break;
}
}
}
}
System.out.println("排序后:"+ Arrays.toString(arr));
}
}
```
这段代码中,我们使用了两层循环。外层循环从第二个元素开始遍历到最后一个元素,内层循环则是从当前元素向前遍历,找到合适的位置插入。如果待排元素小于有序序列的最后一个元素,就将有序序列中的元素向后移动,直到找到合适的位置插入。
插入排序的平均时间复杂度为O(n^2),空间复杂度为O(1),是一种稳定排序算法。对于已经有序或者基本有序的数据来说,插入排序的效率要好得多。当数据有序时,算法运行只需要O(N)的时间。如果数据基本有序,插入排序几乎只需要O(N)的时间,是一个简单而有效的排序方法。\[2\]\[3\]
#### 引用[.reference_title]
- *1* [Java插入排序原理](https://blog.csdn.net/JohnGene/article/details/122411721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [java实现插入排序以及原理解释](https://blog.csdn.net/qq_44922113/article/details/103996870)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [插入排序算法原理及java代码实现](https://blog.csdn.net/qq_21993785/article/details/80373936)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
java插入排序排序原理
插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加了1的有序表。具体实现时,可以将未排序的元素逐个插入到已排序元素的适当位置中,使得插入新元素后仍然保持有序。
插入排序分为直接插入排序和希尔排序两种,其中直接插入排序是最简单的排序算法之一,其排序过程如下:
1. 将第一个元素视为已排序序列,将第二个元素到最后一个元素视为未排序序列。
2. 从未排序序列中取出第一个元素,将其与已排序序列中的元素进行比较,找到插入位置并将该元素插入已排序序列中。
3. 重复上述步骤,直到未排序序列中的所有元素都被插入到已排序序列中。
希尔排序是一种改进的插入排序,其基本思想是将序列按照一定的间隔分成若干个子序列,对每个子序列进行插入排序,然后逐渐缩小间隔直到达到1,最后对整个序列进行一次插入排序。希尔排序的排序效率比直接插入排序要高,但是其排序过程相对较复杂。