冒泡排序
思想:
1、一个无序的数组,n个元素,一共需要排序n-1轮
2、在每一轮中,从数组第0位开始,比较相邻两个元素,如果与需求逆序,就交换这两个元素,在每一轮中,可以将当前最大(最小)的元素交换到最后,
3、直到执行完n-1轮,没有需要比较的元素为止。
代码实现:
public static void bubSort(int[] a){
for (int i = 0;i < a.length - 1;i++){
for (int j = 0;j < a.length - 1 - i;j++){
if (a[j] > a[j + 1]){
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
快速排序
思想:
代码实现:
选择排序
思想:
1、一个无序的数组,一共有n个元素,需要排序n-1轮
2、在每一轮的排序中,需要将当前轮的第0个元素的角标记录下来,然后依次与后面的元素进行比较,如果发现比当前轮第0个元素更小(更大)的元素,就记录角标,当比较完数组最后一个元素,如果最小的元素不是当前轮第0个元素,进行交换。
3、直到执行完n-1轮,所有元素都按顺序排好
代码实现:
public static void seletSort(int[] a){
//外层控制比较的轮数
for (int i = 0;i < a.length - 1;i++){
//声明一个变量,用于存储最小元素的角标,起始位轮数的第一个元素的角标
int minNum = i;
//内层循环控制每一轮的比较,第0个元素从当前轮第一个元素开始比较
for (int j = i + 1;j < a.length;j++){
minNum = (a[minNum] < a[j])?minNum : j;
}
//一轮比完以后,将第0位的元素,如果当前轮最小元素不是第0位,就交换位置
if (minNum != i){
int temp = a[minNum];
a[minNum] = a[i];
a[i] = temp;
}
}
}
插入排序
思想:
1、一个无序的数组,n个元素,一共执行n-1轮
2、在每一轮中,需要将当前有序区边界后一个元素,依次与有序区元素右后向前进行比较,如果是逆序的,就将有序区的该元素向后移一位,直到遇到顺序的有序区元素,就停止比较,进行下一轮,并将该元素插入该有序区元素的后面。
3、直到执行完n-1轮,将所有元素按照顺序排好
代码实现:
public static void insertSort(int[] a){
//外层循环控制轮数
for (int i = 1;i < a.length;i++){
//每一轮中进行比较的元素为a[i]
//变量j为有序区最后一个元素的角标
int num = a[i];
int j = i - 1;
/*内层循环控制每一轮比较的细节 q
要插入的元素一次向前比较,如果小于前面的元素就将比较的元素向后移动
直到数组的第0位
*/
while (j >= 0 && num < a[j]){
a[j + 1] = a[j];
j--;
}
//如果到了数组的第0位或插入的元素比要比较的元素大的情况下,就在比较的元素后面插入
a[j + 1] = num;
}
}