冒泡排序
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;
}
}
}
}
}