关于排序算法
洛谷例题:【模板】排序
以下排序方法,均以 P1177 【模板】排序 为例题,但是这两种算法时间复杂度太高,超出时间限制。
冒泡排序
冒泡排序的基本思想是:通过相邻元素之间的比较和交换,将排序码小的元素逐渐从底部移向顶部。由于整个排序的过程就像水底下的气泡一样逐渐向上冒,因此称为冒泡排序。
具体操作步骤:
- 比较相邻的两个元素。如果第一个元素比第二个元素大,就交换这两个元素;
- 重复上述步骤,直到数组末尾;
- 重复上述两个步骤,直到完成排序。
Java代码:
import java.util.Scanner;
public class test1177 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] arr = new int[5];
for (int i=0;i<arr.length;i++) {
arr[i] = sc.nextInt();
}
for (int i=0;i<arr.length-1;i++) {
for (int j=0;j< arr.length-1;j++) {
int temp = arr[j];
if(arr[j]>arr[j+1]) {
arr[j]= arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(arr);
}
}
选择排序
选择排序的原理是:首先子未排序序列中找到最小(大)元素,存放到排序的起始位置,然后,再从剩余末排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,知道所有的元素均已排序完毕。
具体操作步骤:
- 在数列范围内找到最小(大)元素,与起始位置元素进行交换;
- 除已经排序过的元素外,在剩余数列范围内找到最小(大)元素,与剩余数列的起始位置元素进行交换;
Java代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] arr = new int[num];
for (int i=0;i<arr.length;i++) {
arr[i] = sc.nextInt();
}
for (int i = 0; i < arr.length; i++) {
int index = i;
for (int j = i; j < arr.length; j++) {
if (arr[j] < arr[index])
index = j;
}
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
System.out.println(arr);
}