生活随笔
收集整理的這篇文章主要介紹了
java常用的排序算法的思想以及实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一些常見的排序算法的事項以及java實現
由于時間上的原因沒有計算時間復雜度,以后有時間補上,或者大家有興趣的可以自己算算
package com
.sgcc
.cn
;import java
.util
.Arrays
;
public class SortAlgorithm {public static int[] straightInsertionSort(int[] array
) {int temp
;int i
,j
;for (i
= 1; i
< array
.length
; i
++) {temp
= array
[i
];for (j
= i
-1; j
>= 0 && temp
< array
[j
]; j
--) {array
[j
+1] = array
[j
];}array
[j
+1] = temp
;
}return array
;}public static int[] binaryInsertionSort(int[] array
){int i
,j
;int low
,mid
,heigh
;int temp
;for(i
= 1; i
< array
.length
; i
++){temp
= array
[i
];low
= 0;heigh
= i
-1;while(low
<= heigh
){mid
= (low
+heigh
)/2;if(temp
<array
[mid
]){heigh
= mid
-1; }else {low
= mid
+1;}}for(j
= i
-1; j
>=low
; j
--){array
[j
+1] = array
[j
];}if(low
!= i
){array
[low
] = temp
; }}return array
;}public static int[] shellSort(int[] array
){int i
,j
,k
;int temp
;int dt
= array
.length
/2;while(dt
!= 1){System
.out
.println("現在dt="+dt
);dt
= dt
/2;for(i
= 0; i
< dt
; i
++){for(j
= i
+dt
; j
< array
.length
; j
= j
+dt
){temp
= array
[j
];for(k
= j
-dt
; k
>= 0; k
= k
-dt
){if(temp
< array
[k
]){array
[k
+dt
] = array
[k
];}else{break;}}array
[k
+dt
] = temp
;}}}return array
;}public static int[] simpleSelectionSort(int[] array
) {int i
, j
, k
;int temp
;for (i
= 0; i
< array
.length
; i
++) {temp
= array
[i
];k
= i
;for (j
= i
+ 1; j
< array
.length
; j
++) {if (temp
> array
[j
]) {temp
= array
[j
];k
= j
;}}array
[k
] = array
[i
];array
[i
] = temp
;}return array
;}public static int[] heapSort(int[] array
) {for (int i
= 0; i
< array
.length
; i
++) {createMaxdHeap(array
, array
.length
- 1 - i
);swap(array
, 0, array
.length
- 1 - i
);}return array
;}public static void swap(int[] array
, int i
, int j
) { if (i
== j
) {return;}array
[i
] = array
[i
] + array
[j
];array
[j
] = array
[i
] - array
[j
];array
[i
] = array
[i
] - array
[j
];}public static void createMaxdHeap(int[] array
, int lastIndex
) {for (int i
= (lastIndex
- 1) / 2; i
>= 0; i
--) {int k
= i
;while (2 * k
+ 1 <= lastIndex
) {int biggerIndex
= 2 * k
+ 1;if (biggerIndex
< lastIndex
) {if (array
[biggerIndex
] < array
[biggerIndex
+ 1]) {biggerIndex
++;}}if (array
[k
] < array
[biggerIndex
]) {swap(array
, k
, biggerIndex
);k
= biggerIndex
;} else {break;}}}}public static int[] bubbingSort(int[] array
){int i
,j
;int temp
;for(i
= 0; i
< array
.length
; i
++){for(j
= 0; j
< array
.length
-i
-1; j
++){if(array
[j
] > array
[j
+1]){temp
= array
[j
];array
[j
] = array
[j
+1];array
[j
+1] = temp
;}}}return array
;}public static int[] quicksort(int array
[], int left
, int right
) {int mid
;if (left
< right
) {mid
= partition(array
, left
, right
);quicksort(array
, left
, mid
- 1);quicksort(array
, mid
+ 1, right
);}return array
;}public static int partition(int array
[], int left
, int right
) {int pivot
= array
[left
];while (left
< right
) {while (left
< right
&& array
[right
] >= pivot
)right
--;if (left
< right
)array
[left
++] = array
[right
];while (left
< right
&& array
[left
] <= pivot
)left
++;if (left
< right
)array
[right
--] = array
[left
];}array
[left
] = pivot
;return left
;}public static int[] mergeSort(int[] array
, int left
, int right
) {if (left
>= right
)return array
;int center
= (left
+ right
) / 2;mergeSort(array
, left
, center
);mergeSort(array
, center
+ 1, right
);merge(array
, left
, center
, right
);return array
;} public static void merge(int[] array
, int left
, int center
, int right
) {int[] tmpArr
= new int[array
.length
];int mid
= center
+ 1; int third
= left
; int tmp
= left
; while (left
<= center
&& mid
<= right
) {if (array
[left
] <= array
[mid
]) {tmpArr
[third
++] = array
[left
++];} else {tmpArr
[third
++] = array
[mid
++];}}while (mid
<= right
) {tmpArr
[third
++] = array
[mid
++];}while (left
<= center
) {tmpArr
[third
++] = array
[left
++];}while (tmp
<= right
) {array
[tmp
] = tmpArr
[tmp
++];} }public static int[] radixSort(int[] array
, int radix
, int d
) {int[] tmp
= new int[array
.length
];int[] buckets
= new int[radix
];for (int i
= 0, rate
= 1; i
< d
; i
++) { Arrays
.fill(buckets
, 0);System
.arraycopy(array
, 0, tmp
, 0, array
.length
);for (int j
= 0; j
< array
.length
; j
++) {int subKey
= (tmp
[j
] / rate
) % radix
; buckets
[subKey
]++; }for (int j
= 1; j
< radix
; j
++) {buckets
[j
] = buckets
[j
] + buckets
[j
- 1];}for (int m
= array
.length
- 1; m
>= 0; m
--) {int subKey
= (tmp
[m
] / rate
) % radix
;array
[--buckets
[subKey
]] = tmp
[m
];}rate
*= radix
;}return array
;}public static void printArray(int[] array
) { for (int i
= 0; i
< array
.length
; i
++) { System
.out
.print(array
[i
] + "\t"); } System
.out
.println(); }public static void main(String
[] agrs
) {int[] array
= { 2, 7, 8, 21, 23, 23, 1, 65, 12, 33, 112 };System
.out
.println("排序前的數組:");printArray(array
);System
.out
.println();array
= mergeSort(array
, 0, array
.length
- 1);System
.out
.println("排序后的數組:");printArray(array
);}}
只總結了一些常用算法的實現,分享一下,希望共同學習,共同進步。
關于demo的github地址如下
https://github.com/leo825/sortalgorithm.git
總結
以上是生活随笔為你收集整理的java常用的排序算法的思想以及实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。