- 冒泡排序
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
- 简单选择排序
- 直接插入排序
- 把数组后面那些没排序的元素换到数组前面已经排好序的部分里对应的位置
/**
* 冒泡排序
*/
public void bubbleSort(int[] ints) {
boolean flag = true;
for (int i = 1; i < ints.length - 1 && flag; i++) {
flag = false;
for (int j = ints.length - 1; j >= i; j--) {
if (ints[j] < ints[j - 1]) {
int temp = ints[j];
ints[j] = ints[j - 1];
ints[j - 1] = temp;
flag = true;
}
}
}
}
/**
* 简单选择排序
* 相对于冒泡排序减少了交换次数
*/
public void selectSort(int[] ints) {
for (int i = 0; i < ints.length; i++) {
int min = i;
for (int j = i + 1; j < ints.length; j++) {
if (ints[min] > ints[j]) {
min = j;
}
if (min != i) {
int temp = ints[min];
ints[min] = ints[i];
ints[i] = temp;
}
}
}
}
/**
* 直接插入排序
*/
public void insertSort(int[] ints) {
for (int i = 1; i < ints.length; i++) {
int temp = ints[i];
int position = i;
for (int j = i - 1; j >= 0; j--) {
if (temp < ints[j]) {
ints[j + 1] = ints[j];
position--;
} else {
break;
}
}
ints[position] = temp;
}
}
@Test
public void sort() {
Random random = new Random();
int[] ints = new int[10000];
for (int i = 0; i < ints.length; i++) {
ints[i] = random.nextInt();
}
long start = System.currentTimeMillis();
System.out.println(System.currentTimeMillis() - start);
}