生活随笔
收集整理的這篇文章主要介紹了
选择排序-冒泡排序-归并排序-快速排序-插入排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
選擇排序
基本思想: 設所排序序列個數為N,i取1,2,3…n-1,從N-i+1個記錄(Ri,Ri+1….Rn)中找出排序碼最小的記錄,與第i個記錄交換,執行N-1次后完成序列的排序。
private static void selectSort ( int [ ] arr
, int n
) { for ( int i
= 0 ; i
< n
- 1 ; ++ i
) { for ( int j
= i
+ 1 ; j
< n
; ++ j
) { if ( arr
[ i
] > arr
[ j
] ) { int t
= arr
[ i
] ; arr
[ i
] = arr
[ j
] ; arr
[ j
] = t
; } } }
}
冒泡排序
基本思想: 相鄰的元素進行兩兩比較,順序相反則進行交換,每一次都會將最大或最小的元素"浮上來",最終達到有序
private static void bubbleSort ( in
[ ] arr
, into n
) { for ( int i
= 0 ; i
< n
- 1 ; ++ i
) { for ( int j
= 0 ; j
< n
- 1 - i
; ++ j
) { if ( arr
[ j
] > arr
[ j
+ 1 ] ) { int t
= arr
[ j
] ; arr
[ j
] = arr
[ j
+ 1 ] ; arr
[ j
+ 1 ] = t
; } } }
}
歸并排序
將若干有序序列進行兩兩合并,直到待排序記錄都在一個有序序列中為止
private static void mergeSort ( int [ ] arr
, int n
) { mergeSort ( arr
, 0 , n
- 1 ) ;
} private static void mergeSort ( int [ ] arr
, int low
, int high
) { if ( low
< high
) { int mid
= ( low
+ high
) / 2 ; mergeSort ( arr
, low
, mid
) ; mergeSort ( arr
, mid
+ 1 , high
) ; merge ( arr
, low
, mid
, high
) ; }
} private static void merge ( int [ ] arr
, int low
, int mid
, int high
) { int [ ] temp
= new int [ high
- low
+ 1 ] ; int i
= low
; int j
= mid
+ 1 ; int k
= 0 ; while ( i
<= mid
&& j
<= high
) { if ( arr
[ i
] < arr
[ j
] ) { temp
[ k
++ ] = arr
[ i
++ ] ; } else { temp
[ k
++ ] = arr
[ j
++ ] ; } } while ( i
<= mid
) { temp
[ k
++ ] = arr
[ i
++ ] ; } while ( j
<= high
) { temp
[ k
++ ] = arr
[ j
++ ] ; } for ( int k2
= 0 ; k2
< temp
. length
; k2
++ ) { arr
[ k2
+ low
] = temp
[ k2
] ; }
}
快速排序
基本思想: 通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序。
private static void quickSoft ( int arr
[ ] , int length
) { quickSoft ( arr
, 0 , length
- 1 ) ;
} private static void quickSoft ( int arr
[ ] , int low
, int high
) { int pos
; if ( low
< high
) { pos
= partition ( arr
, low
, high
) ; quickSoft ( arr
, low
, pos
- 1 ) ; quickSoft ( arr
, pos
+ 1 , high
) ; }
} private static int partition ( int [ ] arr
, int low
, int high
) { int val
= arr
[ low
] ; while ( low
< high
) { while ( low
< high
&& arr
[ high
] >= val
) { -- high
; } arr
[ low
] = arr
[ high
] ; while ( low
< high
&& arr
[ low
] <= val
) { ++ low
; } arr
[ high
] = arr
[ low
] ; } arr
[ low
] = val
; return low
;
}
插入排序
基本思想: 每次將一個待排序的記錄按其關鍵碼的大小插入到一個已經排好序的有序序列中,直到全部記錄排好序。
private static void insertSoft ( int [ ] arr
, int n
) { for ( int i
= 1 ; i
< n
; i
++ ) { int t
= arr
[ i
] ; int k
= i
; for ( int j
= i
- 1 ; j
>= 0 && arr
[ j
] > t
; -- j
) { arr
[ j
+ 1 ] = arr
[ j
] ; k
= j
; } arr
[ k
] = t
; }
}
總結
以上是生活随笔 為你收集整理的选择排序-冒泡排序-归并排序-快速排序-插入排序 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。