/**
* 插入排序
* @author xy
* */
@suppresswarnings
("rawtypes"
)public
class
insertsort}}
public
static
void
sort
(comparable[
] v,
int lo,
int hi)}}
public
static
boolean
less
(comparable a, comparable b)
public
static
void
exchange
(comparable[
] v,
int a,
int b)
public
static
boolean
issorted
(comparable[
] v)
return
true;}
public
static
void
show
(comparable[
] v)
system.out.
println
(sb.
tostring()
);}public
static
void
main
(string[
] args)
;sort
(n,2,7
);show
(n);
// sort(n);
// show(n);
// system.out.println(issorted(n));
}}
插入排序對小陣列和部分有序的陣列非常有效,因為其總是在和當前位的左邊進行比較,如果不小於左邊則不進行交換,所以對於乙個無序陣列如果能夠調整為部分有序的陣列然後使用前面的插入排序,那麼速度會大大加快。希爾排序的原理就是使用乙個遞增序列,以遞增序列為步長進行插入排序,最後以步長為1進行插入排序,過程可以看做是先進行部分調整使得陣列部分有序,加快最後一步的插入排序。對於乙個很大的陣列,使用希爾排序是個不錯的選擇,因為相對於歸併排序、快速排序、堆排序,希爾排序的邏輯更加簡單(變步長的插入排序)。
/**
* 希爾排序
* @author xy
* */
@suppresswarnings
("rawtypes"
)public
class
shellsort
while
(h>0)
} h/=3;
}}public
static
boolean
less
(comparable a, comparable b)
public
static
void
exchange
(comparable[
] v,
int a,
int b)
public
static
boolean
issorted
(comparable[
] v)
return
true;}
public
static
void
show
(comparable[
] v)
system.out.
println
(sb.
tostring()
);}public
static
void
main
(string[
] args)
;sort
(n);
show
(n);
system.out.
println
(issorted
(n));}
}
演算法初級 插入排序
插入排序的核心是將標記元素左側視為有序 即已經排序好的元素 然後用標記元素與左側元素從右往左進行比較,若比較元素比標記元素大,則兩者交換位置,直到左側比較元素比標記元素小,則迴圈結束,即將標記元素插入該位置 private long a private int nelems public void ...
初級排序演算法之選擇排序和插入排序
前情摘要 現在我們學了一些基礎的資料結構,如鍊表,佇列,棧,等等。現在我們開始學習一些非常基礎的排序演算法。今天我們要講的是選擇排序,插入排序以及對插入排序的優化 希爾排序。選擇排序 基礎原理 比如說我們的輸入模型是有限的陣列,對陣列中的元素進行排序。對於選擇排序來說就是從該陣列中找出第乙個最小的元...
排序演算法 2 插入排序
插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。本節介紹兩種插入排序方法 直接插入排序和希爾排序。直接插入排序 直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中...