常见的几种排序方法:冒泡排序、选择排序、插入排序、选择排序
1、冒泡排序:每次比较相邻的像个数,值小的往前冒泡,时间复杂度O(n2)
2、选择排序:每次选择最小的一个数放在前面,时间复杂度O(n2)
3、插入排序:每个数插入前面的有序数列中,时间复杂度O(n2)
4、选择排序:利用递归方法,不断将小于某个数的数字放左边,大于这个数的放右边O(N*logN)
代码如下:
public class test {
public static void main(String[] args) {
int[] num = new int[]{9, 3, 1, 5, 7, 2, 4, 8, 6, 10,14,11,12};
// maoPao(num);
// select(num);
// insert(num);
quick(num, 0, num.length-1);
for (int i = 0; i < num.length - 1; i++) {
System.out.printf(num[i] + "");
}
}
/**
* 冒泡排序
*
* @param num
* @return
*/
private static int[] maoPao(int[] num) {
if (num == null || num.length <= 0) {
return null;
}
if (num.length == 1) {
return num;
}
int temp;
boolean flag = true; // 标志位 有改动
for (int i = 0; i < num.length - 1; i++) {
flag = true;
//从最后一个开始向前冒泡
for (int j = num.length - 1; j > 0; j--) {
if (num[j] < num[j - 1]) {
//大的排后 小的向前冒泡
temp = num[j];
num[j] = num[j - 1];
num[j - 1] = temp;
flag = false;
}
}
if (flag) {
//一个循环都没有冒泡行为则已排好序,无需再循环
return num;
}
}
return num;
}
/**
* 选择排序
*
* @param num
*/
private static void select(int num[]) {
if (!check(num))
return;
int currentIndex = 0;
int temp;
for (int i = 0; i < num.length - 1; i++) {
currentIndex = i;
//每次循环选择最小数的位置下标
for (int j = i; j < num.length - 1; j++) {
if (num[j] < num[currentIndex]) {
currentIndex = j;
}
}
//如果有最小的则替换
if (currentIndex != i) {
temp = num[i];
num[i] = num[currentIndex];
num[currentIndex] = temp;
}
}
}
/**
* 插入查询
*
* @param num
*/
private static void insert(int[] num) {
if (!check(num)) {
return;
}
int temp;
for (int i = 0; i < num.length - 1; i++) {
for (int j = i + 1; j > 0; j--) {
if (num[j] < num[j - 1]) {
temp = num[j - 1];
num[j - 1] = num[j];
num[j] = temp;
} else {
break;
}
}
}
}
/**
* 快速排序
*
* @param num
*/
private static void quick(int[] num, int l, int r) {
if (!check(num) || l >= r)
return;
int i = l;
int j = r;
int key = num[l];
while (i < j) {
//大的放右边
while (i < j && num[j] >= key) {
j--;
}
if (i < j) {
num[i] = num[j];
i++;
}
//小的放左边
while (i < j && num[i] < key) {
i++;
}
if (i < j) {
num[j] = num[i];
j--;
}
}
num[i] = key;
quick(num, l, i - 1);
quick(num, i + 1, r);
}
private static boolean check(int num[]) {
if (num == null || num.length <= 0) {
return false;
}
if (num.length == 1) {
return false;
}
return true;
}
}
网友评论