1.冒泡排序
基本思想:对比相邻的元素值,把较小的元素移动到数组的前面,把较大的元素移动到数组的后面。
算法:由双层循环实现,外层循环用于控制排序轮数;内层循环用于对比数组中两个相邻元素的位置,以便于交换位置,把较小的元素提到前面。
示例:
public class text {
public static void main(String[] args) {
//定义数组{11, 12, 13, 14, 15}
int[] arr = {11, 12, 13, 14, 15};
//打印数组
Print(arr);
//创建冒泡排序的方法,传入的数据为数组arr
BubbleSort(arr);
//冒泡排序之后打印数组
Print(arr);
}
private static void BubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int i1 = 0; i1 < arr.length - 1; i1++) {
if (arr[i1] > arr[i1 + 1]) {
//使用位运算符进行元素数值互换
arr[i1] = arr[i1] ^ arr[i1 + 1];
arr[i1 + 1] = arr[i1] ^ arr[i1 + 1];
arr[i1] = arr[i1] ^ arr[i1 + 1];
}
}
}
}
private static void Print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.println(arr[i]);
break;
}
System.out.print(arr[i] + ",");
}
}
}
2.直接选择排序
基本思想:将指定排序位置元素与其他数组元素分别进行对比,如果满足元素就交换元素值。
优点:和冒泡排序相比,直接排序的交换次数要少,所以速度会更快。
算法:每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序的放在已经排列好的数列的最后,直到全部待排列的数据元素排完。
示例:
public class text {
public static void main(String[] args) {
//定义数组{11, 12, 13, 14, 15}
int[] arr = {11, 12, 13, 14, 15};
//打印数组
Print(arr);
//创建直接选择排序的方法,传入的数据为数组arr
SelectSort(arr);
//直接选择排序之后打印数组
Print(arr);
}
private static void SelectSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int index = 0;
//找出每次排序的最大值
for (int i1 = 1; i1 <= arr.length - i; i1++) {
if (arr[index] < arr[i1]) {
index = i1;
}
}
//交换index与arr.length-i位置的元素
int temp = arr[index];
arr[index] = arr[arr.length - i];
arr[arr.length - i] = temp;
}
}
private static void Print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.println(arr[i]);
break;
}
System.out.print(arr[i] + ",");
}
}
}
3.反转排序
基本思想:以相反的顺序将原有的数组的内容重新排序,也就是将最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推。
示例:
public class text {
public static void main(String[] args) {
//定义数组{11, 12, 13, 14, 15}
int[] arr = {11, 12, 13, 14, 15};
//打印数组
Print(arr);
//创建反转排序的方法,传入的数据为数组arr
InvertSort(arr);
//反转排序之后打印数组
Print(arr);
}
//反转方法主体
private static void InvertSort(int[] arr) {
int start, end;
for (start = 0, end = arr.length - 1; start < end; start++, end--) {
arr[start] = arr[start] ^ arr[end];
arr[end] = arr[start] ^ arr[end];
arr[start] = arr[start] ^ arr[end];
}
}
private static void Print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.println(arr[i]);
break;
}
System.out.print(arr[i] + ",");
}
}
}