1. 程式人生 > >java演算法-插入排序

java演算法-插入排序

撲克牌,相信很多人都玩過,我們抓牌的時候,一般都是把抓上來的牌跟手上的牌比較,然後插到左邊或者右邊( 看你是從大到小,還是從小到大 )。

這就是插入排序。

package com.ghostwu;

import java.util.Random;

class MyInsertSort{
    int maxSize;
    int[] arr;
    public MyInsertSort( int s ){
        arr = new int[s];
        Random rand = new Random();
        for( int
i = 0; i < arr.length; i++ ){ arr[i] = rand.nextInt( 101 ); } } public void sort(){ //從下標1開始,下標為0就一個數,他就是有序的 for( int i = 1; i < arr.length; i++ ){ int tmp = arr[i]; int j = i; //從已經排好序的數 最右邊的開始比較,如果小,就把當前的值,繼續和他前面的比較
while( j > 0 && tmp < arr[j-1] ) { arr[j] = arr[j-1]; //往後移動 j--; } //開始插入 arr[j] = tmp; System.out.println( "第" + i + "輪,排序結果" ); printArray(); } }
public void printArray(){ for( int i = 0; i < arr.length; i++ ){ System.out.print( arr[i] + "\t" ); } System.out.println(); } } public class InsertSort2 { public static void main(String[] args) { MyInsertSort s = new MyInsertSort( 10 ); System.out.println( "--------------排序前--------------" ); s.printArray(); s.sort(); System.out.println( "--------------排序後--------------" ); s.printArray(); } }

排序細節與結果:

--------------排序前--------------
37    87    4    32    9    62    81    41    84    41    
第1輪,排序結果
37    87    4    32    9    62    81    41    84    41    
第2輪,排序結果
4    37    87    32    9    62    81    41    84    41    
第3輪,排序結果
4    32    37    87    9    62    81    41    84    41    
第4輪,排序結果
4    9    32    37    87    62    81    41    84    41    
第5輪,排序結果
4    9    32    37    62    87    81    41    84    41    
第6輪,排序結果
4    9    32    37    62    81    87    41    84    41    
第7輪,排序結果
4    9    32    37    41    62    81    87    84    41    
第8輪,排序結果
4    9    32    37    41    62    81    84    87    41    
第9輪,排序結果
4    9    32    37    41    41    62    81    84    87    
--------------排序後--------------
4    9    32    37    41    41    62    81    84    87    

相關推薦

java演算法-插入排序

撲克牌,相信很多人都玩過,我們抓牌的時候,一般都是把抓上來的牌跟手上的牌比較,然後插到左邊或者右邊( 看你是從大到小,還是從小到大 )。 這就是插入排序。 package com.ghostwu; import java.util.Random; class MyInsertSort{

java版資料結構與演算法插入排序

/** * 插入排序:時間複雜度O(n^2),但比氣泡排序,選擇排序要好 * 把下標為1的先取出來,當做臨時變數,下標為0的元素相當於排好序的 * 然後把下標為1的元素與下標為0的元素比較(升序),如果臨時變數比下標為0 * 的元素小,則下標為0的元素向後移動一個下標,臨時變數插到下

java排序演算法插入排序

插入排序 插入排序的思想方法: 將第一個元素看做是有序的元素(即待排序列的第一個元素看做是有序序列),然後我們將第二個元素和有序序列(即第一個元素)作比較,按正確的序列插入到序列中去。然後在將第三個元素和前面有序序列(即整個待排序列的前兩個元素)作比較,將第三個插入到前兩個元素中去,使得前三

【資料結構】Java實現各類經典排序演算法——插入排序、希爾排序

一、插入排序    顧名思義,插入排序從左往右掃描陣列,每趟排序把一個元素“插入”到已排序部分陣列的合適位置中。既然是“插入”,則不必兩兩交換元素來進行排序,從邏輯上把當前元素放到合適位置,並把該位置右側部分元素往右移動一格就可以了。這樣做和氣泡排序的交換相鄰元素比,好處在於

java 二分插入排序演算法

 二分插入排序實現原理: 假定從小到大排序,從第二個數開始,把當前的數用一個變數temp儲存起來作為要插入的數,然後根據二分查詢原則在要插入的數前面找到需要插入的地方,然後較大的數依次往後移,將temp放在插入的地方。然後從第三個數開始如此往返迴圈將所有的數插入進去。 時間複雜度 O(nl

演算法(第四版)學習筆記之java實現插入排序

插入排序:插入排序是在遍歷元素的過程中,當前索引左邊的所有元素都是有序的,但最終位置是不確定的;當前索引右邊的所有元素都是待排序的,而排序的過程就是逐漸將索引右邊的無序的元素按照自己制定的排序規則插入

java插入排序

ID ann break can port exti new int num import java.util.Scanner;public class test22 { public static void main(String[] args) { Scanner i

排序演算法--插入排序之希爾排序

希爾排序是對直接插入排序演算法的改進,把整個序列分割為若干子序列,對每個子序列進行直接插入排序,最後對整個序列進行直接插入排序(因為經過前面的子序列排序,整個序列基本有序,最後進行一次直接插入排序效率會比一開始就做排序高)。 如果掌握了直接插入排序,那麼希爾排序也比較容易理解了

排序演算法--插入排序之直接插入排序

直接插入排序的核心思想是把一個記錄插入一個有序序列中,每插入一個記錄就得到一個新的有序序列,直到所有記錄都插入成功,得到有序序列。 每次插入記錄時的有序序列如何得到,關鍵在第一次,第一次要插入的記錄時序列的第二個值,有序序列只有一個值,就是第一個記錄。 程式碼: #in

經典排序演算法 - 插入排序Insert Sort

最近學習了一下排序演算法,寫篇文章記錄一下,詳細講解網上有很多,可以自己去查 插入排序Insert Sort 直接插入排序就是依次將無序表中的資料插入到有序表的適當位置,使有序表仍有序,直到全部插入為止。插入排序的時間複雜度是O(n²),是穩定排序。 [ 2

排序演算法插入排序(關鍵詞:資料結構/演算法/排序演算法/插入排序

假定:有 1 個亂序的數列 nums ,其中有 n 個數。 要求:排好序之後是 從小到大 的順序。 插入排序演算法 程式碼 def insert_sort(nums): i = 1 n = len(nums) while i <= n-1: j = i

PHP 演算法 插入排序

function InsertSort(array $container){ $count = count($container); for ($i = 1; $i < $count; $i++){ $temp = $container[$i]; $j = $i - 1; while($j >=

golang 演算法 插入排序

mian.go package main import ( "container/list" "fmt" "sort" ) func main() { num := []int{432, 432432, 0, 4234, 333, 333, 21, 22, 3, 30, 8, 2

JAVA插入排序,無方法體

分析: 1.1. 插入排序和氣泡排序/選擇排序,都是常見的面試內容.下面給大家分析一下插入排序 1.2. 插入排序,按照字面意思就是將陣列中的其中一個值先取出賦值給temp,該值所在的位置i留空並用(j=i)接受位置,然後用temp依次與前面的值比較,如果比temp大,往後移一位,將

Java演算法-快速排序

通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的資料均比關鍵字小,而另一部分記錄的資料均比關鍵字大,則分別對這兩部分繼續進行排序,直到整個序列有序。 把整個序列看做一個數組,把第零個位置看做中軸,和最後一個比,如果比它小交換,比它大不做任何處理;交換了以後再和小的那端

排序演算法插入排序

插入排序Java實現: /** * 陣列中5個數排序:插入排序 * 將每一個元素插到其他已經有序的序列中的適當位置 * begin:起始索引位置 * end:結束索引位置 */ public static void

排序演算法--插入排序--直接插入排序

//插入排序--直接插入排序 void print_insert_sort_list(int list[] , int count) {     for(int i = 0 ; i < count ; i++)     {         printf("%5d" ,

排序演算法--插入排序--希爾排序

//插入排序--希爾排序 //希爾(Shell)排序又稱為縮小增量排序,它是一種插入排序。它是直接插入排序演算法的一種威力加強版。 void print_shell_sort_list(int list[] , int count) {     for(int i = 0

排序演算法——插入排序

直接插入排序 最簡單的排序方法。它的基本操作是將一個記錄插入到已經排好序的有序表中,從而得到一個新的、記錄增1的有序表。 把n個待排序的元素看成一個有序表和一個無序表,開始時有序表中只有一個元素,無序表中有n-1個元素;排序過程即每次從無序表中取出第一個元素,將它插入到

Java演算法——————七大排序

排序演算法的分類: 排序:基本排序:{交換排序:氣泡排序,快速排序。                              {選擇排序:選擇排序,堆排序                              {插入排序:直接插入排序,Shell排序