日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

(数据结构与算法)插入排序和希尔排序

發布時間:2025/3/20 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (数据结构与算法)插入排序和希尔排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 插入排序

插入排序(Insertion Sorting)的基本思想是:把n個待排序的元素看成一個有序表和一個無序表,開始時有序表中只包含一個元素無序表中包含有n-1個元素,排序過程中每次從無序表中取出第一個元素, 把它的排序碼依次與有序表元素的排序碼進行比較,將它插入到有序表中的適當位置,使之成為新的有序表。

代碼演示

package com.zh.data_structures.sort;import java.util.Arrays;public class InsertSort {//插入排序,將第一個數和其他數分為一個有序表和無序表,每一次從無序表中插入一個元素到有序表public static void main(String[] args) {int arr[] ={5,1,4,3,7};System.out.println("排序前");System.out.println(Arrays.toString(arr));insertSort(arr);System.out.println("排序后");System.out.println(Arrays.toString(arr));}public static void insertSort(int[] arr){//插入元素值int insertVal = 0;//插入元素前一個的下標int insertIndex = 0;for (int i = 1; i <arr.length ; i++) {//保存插入元素值insertVal = arr[i];insertIndex = i - 1;//當下標未越界,且插入值小于插入元素前一個的值(有序表中)時,將arr[insertIndex]后移while (insertIndex >= 0 && insertVal < arr[insertIndex]){arr[insertIndex+1] = arr[insertIndex];insertIndex --;}//當退出while循環時,說明插入位置找到,insertIndex+1if (insertIndex+1!=i){//判斷是否需要賦值//insertIndex+1就是插入元素的下標arr[insertIndex+1] = insertVal;}System.out.println("第"+i+"輪排序結果為"+Arrays.toString(arr));}} }

2. 希爾排序

插入排序存在一定的問題,當需要插入的元素較小時,后移的次數明顯增多,對效率有影響。希爾排序解決了這個問題。

基本思想
希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組, 算法便終止。

代碼實現

package com.zh.data_structures.sort;import java.util.Arrays;public class ShellSort {public static void main(String[] args) {int[] arr = {8,9,1,7,2,3,5,4,6,0};System.out.println("排序前");System.out.println(Arrays.toString(arr));shellSort(arr);System.out.println("排序后");System.out.println(Arrays.toString(arr));}//交換法public static void shellSort(int[] arr){//計數int count = 0;//增量gap,并逐步的縮小增量for (int gap = arr.length/2; gap>0 ; gap /= 2) {//從第gap個元素,逐個對其所在的組進行直接插入排序for (int i = gap; i <arr.length ; i++) {int j = i;int temp = arr[j];if (temp < arr[j-gap]) {//如果當前元素小于對應位置元素,則移動while (j - gap >= 0 && temp < arr[j - gap]) {//移動arr[j] = arr[j - gap];j -= gap;}//當退出while循環時,就給temp找到了插入的位置arr[j] = temp;}}System.out.println("第"+(++count)+"輪排序結果為"+Arrays.toString(arr));}}}

總結

以上是生活随笔為你收集整理的(数据结构与算法)插入排序和希尔排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。