1.冒泡排序
冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
示例代码:
public class BubbleSort {
public static void main(String[] args) {
//创建一个数组,这个数组元素是乱序的
int[] array={38,7,24,10,16,6};
//创建冒泡排序类的对象
BubbleSort bubbleSort=new BubbleSort();
//调用排序方法将数组排序
bubbleSort.sort(array);
}
public void sort(int[] array){
for (int i = 1; i < array.length; i++) {
//比较相邻两个元素,较大的数往后冒泡
for (int j = 0; j < array.length-i; j++) {
if(array[j]>array[j+1]){
//把第一个元素的值保存到临时变量中
int inta=array[j];
//把第二个元素的值保存到第一个元素单元中
array[j]=array[j+1];
//把临时变量保存到第二个元素中
array[j+1]=inta;
}
}
}
//遍历数组
for (int i : array) {
System.out.print(" "+i);
}
}
}
运行结果截图:
2. 直接选择排序
直接选择排序方法属于选择排序的一种,它的排序速度要比冒泡排序块一些。直接选择排序是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,这里区别冒泡排序,并不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。
每一趟从待排序的数组元素中选择最大(或最小)的一个元素,顺序地放在已排好序的数列的最后。算法示例:
示例代码:
public class SelectSort {
public static void main(String[] args) {
//创建一个数组,这个数组元素是乱序的
int[] array={35,9,23,10,18,5};
System.out.println("数组排序前:");
for (int i : array) {
System.out.print("\t"+i);
}
System.out.println();
//创建直接排序的对象
SelectSort sorter=new SelectSort();
//调用排序对象的方法将数组排序
sorter.sortArray(array);
}
public void sortArray(int[] array){
int inta;
for (int i = 1; i < array.length; i++) {
inta=0;
for (int j = 1; j <= array.length-i; j++) {
if(array[j]>array[inta]){
inta=j;
}
}
//交换在位置array.length-i和inta(最大值)上的两个数
//把第一个元素的值保存到临时变量中
int intb=array[array.length-i];
//把第二个元素的值保存到第一个元素单元中
array[array.length-i]=array[inta];
//把第一个元素的值保存到第二个元素中
array[inta]=intb;
}
//遍历数组
System.out.println("数组排序后:");
for (int intc : array) {
System.out.print("\t"+intc);
}
}
}
运行结果截图:
3.反转排序
反转排序是以相反的顺序把原有数组的内容重新排序,它的实现思路是把数组最后一个元素与第一个元素替换,然后是倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换。
反转排序是对数组两边的元素进行替换,所以只需要循环数组长度的半数次,如数组长度为7,那么for循环只需循环3次。
示例代码:
public class ReverseSort {
public static void main(String[] args) {
//创建一个数组
int[] array={10,20,30,40,50,60};
//创建反转排序类的对象
ReverseSort sorter=new ReverseSort();
//调用排序对象的方法将数组反转
sorter.sort(array);
}
public void sort(int[] array){
System.out.println("数组原有的排序:");
//遍历数组
for (int inta : array) {
System.out.print("\t"+inta);
}
System.out.println();
int temp;
int num=array.length;//获取数组的长度
for (int i = 0; i < num/2; i++) {
temp=array[i];
array[i]=array[num-1-i];
array[num-1-i]=temp;
}
//反转的过程
//初始数组资源:[10 20 30 40 50 60]
//第一趟排序后:60 [20 30 40 50] 10
//第二趟排序后:60 50 [30 40] 20 10
//第三趟排序后:60 50 40 30 20 10
System.out.println("数组反转后的排序:");
for (int intb : array) {
System.out.print("\t"+intb);
}
}
}
运行结果截图: