冒泡排序
package com.lei.go;
public class BubbleSort {
public static void main(String [] args) {
int [] a ={1,3,5,12,4,6,1};
a=bubbleSort(a, 7);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
public static void bubbleSort(int[] A, int n) {
if (A == null || A.length < 2) {
return null;
}
// 將數組中相鄰的兩個元素進行比較。
for (int i = 0; i < n; i++) {
// 第i次 結束 時數組中i+1個 元素有序 所以 j=n-1-i
for (int j = 0; j < n-i-1; j++) {
// 大的元素向後移動。
if (A[j]>A[j+1]) {
A[j]=A[j+1]+A[j];
A[j+1]= A[j]-A[j+1];
A[j]=A[j]-A[j+1];
}
}
}
}
}
插入排序
package com.lei.go;
public class InsertionSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] a ={1,3,5,12,4,6,1};
System.out.println("排序之前:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"");
}
insertionSort(a, 7);
System.out.println();
System.out.println("排序之後:");
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
public static void insertionSort(int[] A, int n) {
int temp ;
for (int i = 0; i < n-1; i++) {
// 每次從 第1個位置開始 向前查找。 前邊的元素比當前位置大就交換位置。 如果前邊的比當前的元素小就停止
for (int j = i; j >= 0; j--) {
if (A[j+1]<A[j]) {
temp = A[j+1];
A[j+1] = A[j];
A[j] = temp;
}
else {
break;
}
}
}
}
}
二分插入排序
package com.lei.go;
public class BinarySort {
public static void main(String[] args) {
int[] a = { 49, 38, 65, 97, 176, 213, 227, 49, 78, 34, 12, 164, 11, 18,1 };
System.out.println("排序之前:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
// 二分插入排序
binarySort(a);
System.out.println();
System.out.println("排序之後:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
private static void binarySort(int[] a) {
for (int i = 0; i < a.length; i++) {
int temp = a[i];
int left = 0;
int right = i - 1;
int mid = 0;
// 進行二分 分割。 直到分割成 僅有一個元素時 分割停止
while (left <= right) {
mid = (left + right) / 2;
if (temp < a[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
// a[i] < 有序數組中某個值。 則需要將 a[i]插入到 某個位置,然後將後邊的數組依次向後移動一位
//如果 a[i] >所有有序數組中的元素,則不要移動
for (int j = i - 1; j >= left; j--) {
a[j + 1] = a[j];
}
// 將移動之後空出來的位置 放入 待排序的 a[i]
if (left != i) {
a[left] = temp;
}
}
}
}
選擇排序
package com.lei.go;
public class SelectionSort {
public static void main(String [] args){
int [] a={1,2,7,8,3,2,1};
selectionSort(a,7);
//打印時注意 a.length 才能打印出所有結果 <
for (int i = 0; i < a.length; i++) {
System.out.println(b[i]);
}
}
public static void selectionSort(int[] A, int n) {
//每次選擇一個最小的放在當前未排序數組最前邊。
int temp;
for (int i = 0; i <n; i++) {
for (int j = i+1; j < n; j++) {
// 依次與其後邊的剩餘數組進行比較,如果後邊的比a[i]小。則交換兩個元素。
// 每次循環結束,找到一個當前最新元素
if (A[j]<A[i]) {
temp = A[i];
A[i] =A[j];
A[j] = temp;
}
}
}
}
}