1.冒泡排序
原理:比较两个相邻元素,将值大的元素交换至右端
思路:依次比较数组内相邻元素,将小数放在左边。
如果数组内有n个元数则比较n-1次
for(int i=0;i<arr.length-1;i++){//遍历数组元素
for(int j=0;j<arr.length-i-1;j++){//比较相邻元素的大小,较大的数往后冒泡
//数组元素交换位置
if(arr[j]>arr[j-1]){
int temp =arr[j];//定义临时变量temp 并赋值
arr[j] =arr[j-1];//把arr[j-i]保存到arr[j]中
arr[j-i] = temp;//交换位置
}
}
}
showArray(array);// 输出冒泡排序后的数组元素
public void showArray(int[] array) {//定义一个showArray()方法用于输出冒泡数组的元素
for (int i : array) {// foreach格式遍历数组 for(数据类型 变量名:数组名)
System.out.print(" >" + i);// 输出每个数组元素值
}
System.out.println();
}
例子:
public class BubbleSort {
public static void main(String[] args) {
// 创建一个数组,这个数组元素是乱序的
int[] array = { 63, 4, 24, 1, 3, 15 };
// 创建冒泡排序类的对象
BubbleSort sorter = new BubbleSort();
// 调用排序方法将数组排序
sorter.sort(array);
//严格来说类里面不能写语句,语句写在方法里面
}
/**
*冒泡排序
*
* @param array
* 要排序的数组
*/
public void sort(int[] array) {//创建一个公共的无返回值类型的sort方法
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) {// foreach格式遍历数组
System.out.print(" >" + i);// 输出每个数组元素值
}
System.out.println();
}
}
2.直接排序
思路:定义一个数(int inmax=0),与数组内元素依次比较,如果这个数比数组内元素大,则数组内元素向左移。如果这个数比数组内元素小,则把这个数组内的元素赋值给定义的与数组内元素比较的数
int []arr = new int[] {1,2,5,88,100,2000,3,4,199,200};
int maxindex = 0;
for (int i = 1; i<arr.length; i++) {
maxindex = 0;
for (int j = 1;j <=arr.length -i; j++) {
if(arr[maxindex]< arr[j]) {
maxindex = j;
}
}
// 如果定义临时变量进行最大的值跟数组内最末尾的元素进行交换,则不需要判断
// 进行异或交换2个值,如果当前两个值相同,则会出现2个值异或后都为0,所以必须进行判断
//如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
if(maxindex != arr.length-i) {
//异或交换值
arr[maxindex] ^= arr[arr.length-i];
arr[arr.length-i] ^= arr[maxindex];
arr[maxindex] ^= arr[arr.length-i];
}
}
System.out.println("数组顺序为:");
for(int tmp:arr)
{
System.out.print(tmp+"\t");
}
3.反转排序
反转排序就是以相反的顺序把原有的数组内容重新排序
反转排序的基本思路就是把最后一个元素与第一个元素交换位置,倒数第二个元素与第二个元素交换位置,依次推。直到把所有的元素交换位置
反转排序不会按升序或者降序排序,反转排序是数组的两边的元素进行替换,所需次数是数组元素的一半。