- 冒泡排序
public static void main(String[] args) {
int srcArray[] = {11, 31, 44, 57, 7, 8, 911, 101, 111, 17, 21, 123, 28, 123, 32, 538, 41, 457, 540, 565, 641, 78, 81, 88, 95, 98};
bubblingSorting(srcArray);
}
/*********************************************** 排序start **********************************************/
// 冒泡排序
public static void bubblingSorting(int srcArray[]) {
for (int i = 0; i < srcArray.length - 1; i++) {
for (int j = 0; j < srcArray.length - i - 1; j++) {
if (srcArray[j] > srcArray[j + 1]) {
int temp = srcArray[j];
srcArray[j] = srcArray[j + 1];
srcArray[j + 1] = temp;
}
}
}
for (int num : srcArray) {
System.out.print(" " + num);
}
}
/*********************************************** 排序end **********************************************/
2. 选择排序
public static void main(String[] args) {
int srcArray[] = {11, 31, 44, 57, 7, 8, 911, 101, 111, 17, 21, 123, 28, 123, 32, 538, 41, 457, 540, 565, 641, 78, 81, 88, 95, 98};
chooseSorting(srcArray);
}
// 选择排序
public static void chooseSorting(int srcArray[]) {
int minIndex = 0;
int temp = 0;
for (int i = 0; i < srcArray.length - 1; i++) {
//无序区的最小数据数组下标
minIndex = i;
for (int j = i + 1; j < srcArray.length; j++) {
//在无序区中找到最小数据并保存其数组下标
if (srcArray[j] < srcArray[minIndex]) {
minIndex = j;
}
}
temp = srcArray[i];
srcArray[i] = srcArray[minIndex];
srcArray[minIndex] = temp;
}
for (int num : srcArray) {
System.out.print(" " + num);
}
}
- 插入排序
public static void main(String[] args) {
int srcArray[] = {11, 31, 44, 57, 7, 8, 911, 101, 111, 17, 21, 123, 28, 123, 32, 538, 41, 457, 540, 565, 641, 78, 81, 88, 95, 98};
insertSorting(srcArray);
}
// 插入排序
public static void insertSorting(int srcArray[]) {
for (int i = 0; i < srcArray.length; i++) {
for (int j = i; j > 0; j--) {
if (srcArray[j] < srcArray[j-1]) {
int temp = srcArray[j];
srcArray[j] = srcArray[j-1];
srcArray[j-1] = temp;
}
}
}
for (int num : srcArray) {
System.out.print(" " + num);
}
}
- 归并排序
public static void main(String[] args) {
int srcArray[] = {11, 31, 44, 57, 7, 8, 911, 101, 111, 17, 21, 123, 28, 123, 32, 538, 41, 457, 540, 565, 641, 78, 81, 88, 95, 98};
mergeSorting(srcArray,0,srcArray.length-1);
print(srcArray);
}
/*********************************************** 排序start **********************************************/
// 归并排序
public static void mergeSorting(int srcArray[], int min, int max) {
int mid = (min + max) / 2;
if (min < max) {
//左边
mergeSorting(srcArray, min, mid);
//右边
mergeSorting(srcArray, mid + 1, max);
//左右归并
merge(srcArray, min, mid, max);
}
}
public static void merge(int[] data, int min, int center, int max) {
// 临时数组
int[] tmpArr = new int[data.length];
// 右数组第一个元素索引
int mid = center + 1;
// third 记录临时数组的索引
int third = min;
// 缓存左数组第一个元素的索引
int tmp = min;
while (min <= center && mid <= max) {
// 从两个数组中取出最小的放入临时数组
if (data[min] <= data[mid]) {
tmpArr[third++] = data[min++];
} else {
tmpArr[third++] = data[mid++];
}
}
// 剩余部分依次放入临时数组(实际上两个while只会执行其中一个)
while (mid <= max) {
tmpArr[third++] = data[mid++];
}
while (min <= center) {
tmpArr[third++] = data[min++];
}
// 将临时数组中的内容拷贝回原数组中
// (原left-right范围的内容被复制回原数组)
while (tmp <= max) {
data[tmp] = tmpArr[tmp++];
}
}
public static void print(int[] data) {
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + "\t");
}
System.out.println();
}