這張圖映象了,當然也可以看明白,再賦另一張圖
}
// 快速排序;
// 定乙個基準點,一般以左側為基準點,兩個指標(i,j右側),
// 先j-->左,遇到小於基準點停下,再i-->右,遇到大於基準點,交換兩個元素。
// 再次 移動j和i相同操作,直到j==i,這時交換這個點和基準點,
// 這個時候,陣列排序: 左側為 小於基準點,右側大於基準點。
// 遞迴同樣的操作
圖一:
圖二:
這裡寫了兩種實現方式:依次對應圖一和圖二
public
void
insertsoft
(int
nums)}}
system.out.
println
("one->"
+arrays.
tostring
(nums));
// 第二種方法:更新大於的值,最後更新實際得到index下標的值 ---圖二
for(
int i =
1; i < nums.length; i++)}
// 插入完成之後,得到 indexvalue 對應的下標 index;
// 更新值
希爾排序參考連線:
public
void
xesoft
(int
nums)}}
system.out.
println
(arrays.
tostring
(nums));
}
圖一:
// 解法一:對應圖一
private
void
quicksoft
(int
nums,
int start,
int end)
int index = start;
int lastindex = end;
int startvalue = nums[start]
;while
(index < lastindex)
while
(nums[index]
<= startvalue && index < lastindex)
int tem = nums[index]
; nums[index]
= nums[lastindex]
; nums[lastindex]
= tem;
}// 跳出迴圈說明,兩者相等,交換基準和該點
if(start != index)
// 操作左邊
quicksoft
(nums, start, index -1)
;// 操作右邊
quicksoft
(nums, index +
1, end);}
// 開始呼叫:
// quicksoft(nums, 0, nums.length - 1);
圖二:
// 解法二:類似雙指標,減少迴圈
public
void
quicksoftdouble
(int
nums,
int start,
int end)
}// 當迴圈結束時,index 指標 指向了陣列nums在範維index-end中,第乙個不小於startvalue值的 對應下標的值,所以應該操作index-1
// 如果沒有找到小於startvalue的,則index = start + 1,
// 交換 start 和 index-1 的值
int tem = nums[start]
; nums[start]
= nums[index -1]
; nums[index -1]
= tem;
// 遞迴
// 左
quicksoftdouble
(nums, start, index -1-
1);// 右
quicksoftdouble
(nums, index, end);}
// 開始呼叫:
// quicksoftdouble(nums, 0, nums.length - 1);
2.
3.
插入排序 選擇排序 氣泡排序 希爾排序
引入概念 排序穩定性 輸入資料的順序,排序後不能改變。例如,1,2,3,3,5.排序完若第乙個3和第二個3互換,則為不穩定。1.插入排序 穩定 解釋 像打撲克時整理牌時一樣,遇到小牌就插在前面比他大的前面,而後面的牌順次後移 直到處理完最後一張牌。優點 比氣泡排序只能處理相鄰資料更為靈活,適用於資料...
氣泡排序,插入排序,選擇排序,希爾排序
在另外的文章中介紹了快速,堆,歸併排序,這三個排序都是高效的排序,下面介紹一些時間複雜度為o n 2 的排序。氣泡排序,顧名思義,就是將小的元素往上冒,大的元素往下沉,實際在變成的時候用的是大的元素往下沉的方法。每一趟過後,都有乙個最大的元素被沉到底。下一次排序時陣列規模減少了1。主要應用到了相鄰兩...
java 氣泡排序 選擇排序 插入排序 希爾排序
最壞均時間複雜度o n 2 整個陣列都是逆序的情況 最好情況o n 整個陣列都已經是順序的情況 對應version3,version1 2不是 public static void main string arg 小到大 version 2 for int i 0 i i j 小到大 version...