排序(Sorting)
排序(sorting)是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。
依据不同的原则对内部排序方法进行分类:
内部排序方法有:插入排序,交换排序,选择排序,归并排序和计数排序等五类。这里重点演示冒泡排序和选择排序。
冒泡排序(Bubble Sort):
原理:
- 相邻元素两两比较,大的往后放;
第一次完毕,最大值出现在最大索引处。
规则:
- 1.每一次比较完毕后,下一次比较的时候就会减少一个元素的比较;
- 2.第一次比较,有0个元素不比;
第二次比较,有1个元素不比;
第三次比较,有2个元素不比;
…- 3.总共需要比较数组长度-1次。
代码
以下代码你可以看到每一次排完序的结果。(只需要在main()方法中调用即可)
//冒泡排序
public static void buffleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
System.out.println("第" + (i+1) + "次排序后:");
for (int x = 0; x < arr.length - 1 - i; x++) {
if (arr[x] > arr[x + 1]) {
int temp = arr[x];
arr[x] = arr[x + 1];
arr[x + 1] = temp;
}
}
PrintArray(arr);
}
}
// 遍历功能
public static void PrintArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ",");
}
}
System.out.println("]");
选择排序(Selection Sort):
原理:
- 从0索引开始,依次和后面元素比较,小的往前放;
第一次完毕,最小值出现在了最小索引处;
其他的同理即可以得到一个排好序的数组。
规则:
- 1.第一次是从0索引开始和其他的进行比较
第二次是从1索引开始和其他的进行比较
…- 2.最后一次是数组长度-2的元素和数组长度-1的元素比较
代码
以下代码你可以看到每一次排完序的结果。(只需要在main()方法中调用即可)
// 选择排序
public static void Choosesort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
System.out.print("第" + (i + 1) + "排序结果:");
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
PrintArray(arr);
}
}
// 遍历数组
public static void PrintArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ",");
}
}
System.out.print("]");
System.out.println();
}