一:冒泡排序
基本介绍:
冒泡排序的基本思想就是:通过对等待排序的序列从前向后(从下标较小的元素开始),此次比较相邻元素的值,若发现逆序则交换,使得较大的元素逐渐从前向后移动,就像水底的气泡一样逐渐向上冒。
优化:因为在排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行交换,就说明序列有序,这时就不需用在进行以下的交换,所以,在排序过程中设置一个flag标志,来判断元素有没有进行交换,从而减少不必要的比较。
代码
public static void Test(int[] array){
int temp;
boolean flage = false;
for (int j = 0;j<array.length-1;j++) {
for (int i = 0; i < array.length - 1 - j; i++) {
if (array[i] > array[i + 1]) {
flage = true;
temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
if (!flage) {
System.out.println(Arrays.toString(array));
return; //证明这一趟没有交换位置,那么下一趟就没有必要在进行了
} else {
flage = false; //如果有交换发生,赋值
}
}
}
注:
- 一共进行n-1次外层大循环,即数组长度-1次循环
- 每一趟排序的次数在逐渐的减少
- 如果我们发现在一趟交换中,序列没有发生一次交换,则可以提前结束冒泡排序(优化)。
二:选择排序
基本介绍:
选择排序就是从欲排序的数据中,按照指定规则选择出某一元素,在依规定交换位置后达到排序的目的。
排序思想:
假设从小到大进行排序:第一次从arr[0]-arr[n-1]中选取最小的数据,与arr[0]的数进行交换,第二次从arr[1]-arr[n-1]中选取最小数据,然后与arr[1]的数进行交换。同理第三次从arr[2]-arr[n-1]。。第四次从arr[3]-arr[n-1]。。。。一共经过n-1次寻找与交换。
代码:
public static void selectedSort(int[] array) {
int min; //最小值
int minIndex; //最小值的下标值
for (int j = 0;j<array.length-1;j++){
min = array[j];
minIndex = j;
for (int i = j; i < array.length; i++) {
if (min>array[i]){
min = array[i];
minIndex = i;
}
}
array[minIndex] = array[j];
array[j] = min;
}
System.out.println(Arrays.toString(array));
}
~~~