Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等
java-攻城狮
2024-10-11 07:58:10
原文
本文就是介绍一些常见的排序算法。排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序、选择排序、冒泡排序、快速排序(重点)、堆排序、归并排序等等。看下图:
给定数组:int data[] = {9,2,7,19,100,97,63,208,55,78}
, , , , , , , , , };
public static void insertSort() {
int tmp, j = ;
for (int k = ; k < data.length; k++) {//-----1-----
tmp = data[k];
j = k - ;
while (j >= && tmp < data[j]) {//-----2-----
data[j + ] = data[j];
j--;
}
data[j + ] = tmp;//------3-------
}
}
public static void main(String[] args) {
print();
System.out.println();
insertSort();
System.out.println();
print();
}
static void print() {
for (int i = ; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
}
我简单的讲解一下过程:思路上从待排序的数据中选出一个,插入到前面合适的位置,耗时点在插入方面,合适的位置意味着我们需要进行比较找出哪是合适的位置,举个例子:对于9,2,7,19,100,97,63,208,55,78这组数,第一个数9前面没有,不做操作,当第一个数完后,剩下的数就是待排序的数,我们将要从除去9开始的书中选出一个插入到前面合适的位置,拿到2后,放在tmp上,进行注释中的2处的代码,2处的代码就是通过循环找出这个合适的位置,发现比tmp大的数,立即将该数向后移动一位(这样做的目的是:前面需要空出一位来进行插入),最后通过注释3处的代码将数插入。
本排序适合:基本有序的数据
, , , , , , , , , };
public static void selectSort() {
int i, j, k, tmp = ;
for (i = ; i < data.length - ; i++) {
k = i;
for (j = i + ; j < data.length; j++)
if (data[j] < data[k])
k = j;
if (k != i) {
tmp = data[i];
data[i] = data[k];
data[k] = tmp;
}
}
}
public static void main(String[] args) {
print();
System.out.println();
selectSort();
System.out.println();
print();
}
static void print() {
for (int i = ; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
}