1.冒泡排序
冒泡排序的基本思想就是对比相邻的元素值,如果满足条件就交换元素值,把小的放前面,把大的放后面。
其算法由两层循环实现,外层循环控制排序次数,一般为排序的数组的长度减1,内层循环主要用于比较相邻元素的大小,以判断是否交换位置。内层的对比次数随着外层排序的次数的增加而减少。代码如下
public class test4 {
@Test
public void test1() {
//创建一个数组
int[] array= {63,4,24,1,3,15};
//创建冒泡排序类的对象
test4 sorter = new test4();
//调用排序方法将数组排序
sorter.sort(array);
}
/**
* 冒泡排序
* @param 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 temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
//输出冒泡排序后的数组元素
showArray(array);
}
/**
* 显示数组中的所有元素
* @param array 要显示的数组
*/
public void showArray(int[] array) {
for(int i:array) {
System.out.print(">"+i);
}
System.out.println();
}
}
2.直接选择排序
直接选择排序的基本思想是将排序位置与其他数组元素一一对比,如果满足条件就交换元素值,这样每次排序都是取得的是剩余数组中最大的元素,再按照顺序摆放。直接选择排序与冒泡排序相比交换的次数要少很多,所以速度会快些。代码如下:
public class SelectSort {
public static void main(String[] args) {
//创建一个数组,这个数组元素是乱序的
int[] array = {63,4,24,1,3,15};
//创建直接排序类的对象
SelectSort sorter = new SelectSort();
//调用排序对象的方法将数组排序
sorter.sort(array);
}
/**
* 直接选择排序
* @param array 要排序的数组
*/
public void sort(int[] array) {
int index;
for(int i=1;i<array.length;i++) {
index=0;
for(int j=1;j<=array.length-i;j++) {
if(array[j]>array[index]) {
index = j;
}
}
//交换在位置array.length-i和index(最大值)上的两个数
int temp = array[array.length-i];
array[array.length-i] = array[index];
array[index] = temp;
}
showArray(array);
}
public void showArray(int[] array) {
for(int i:array) {
System.out.print(">"+i);
}
System.out.println();
}
}
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);
}
/**
* 反转排序
* @param array 要排序的数组
*/
public void sort(int[] array) {
System.out.println("数组原有内容:");
showArray(array);
int temp;
int len = array.length;
for(int i=0;i<len/2;i++) {
temp = array[i];
array[i] = array[len-1-i];
array[len-1-i] = temp;
}
System.out.println("数组反转后内容:");
showArray(array);
}
/**
* 显示数组中的所有元素
* @param array 要显示的数组
*/
public void showArray(int[] array) {
for(int i:array) { //遍历数组
System.out.print("\t"+i); //输出每个数组元素值
}
System.out.println();
}
}