排序算法之冒泡选择插入排序(Java)
Posted yuwenS.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法之冒泡选择插入排序(Java)相关的知识,希望对你有一定的参考价值。
通过Java实现冒泡、选择、插入排序算法
排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程、排序算法有、冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、基数排序、堆排序、桶排序和计数排序。这里就简单实现其中的冒泡、选择和插入排序。
冒泡排序
冒泡排序介绍和实现
冒泡排序通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若大于相邻的元素就交换,使值较大的元素逐渐从前移向后部,这样逐个依次进行比较和交换,就像水底下的气泡一样逐渐向上冒,这样就能达到排序的目的
具体代码的实现
public static void bubbleSort(int[] arr){
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]){
flag = true;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
对于冒泡排序还能进行优化,可以设置一个表示变量,用来判断是否发生了交换,如果没有发生交换则说明这个数组是已经排序好的
优化之后的代码
public static void bubbleSort(int[] arr){
int temp = 0;
boolean flag = false; //标识变量。是否进行过交换
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]){
flag = true;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
if (!flag){ //在排序中,一次交换都没有发生
break;
}else {
flag = false; //重置flag,进行下次交换
}
}
}
选择排序
选择排序介绍和实现
选择排序是第一次从待排序的数据元素中选出最小或最大的一个元素,存放到起始位置,然后再从剩下的未排序元素中选出最小的或最大的元素,放到已排序的序列的末尾,就是第二个位置,依次类推,直到待排的元素个数未零,这样就实现了排序。选择排序是不稳定的排序方法。
选择排序图解
具体代码实现
public static void selectSort(int[] arr){
int minIndex = 0;
int min = 0;
for (int i = 0; i < arr.length - 1; i++) {
min = arr[i]; //假设第一个元素最小
minIndex = i; //最小元素的下标
for (int j = i+1; j < arr.length; j++) {
if (min > arr[j]){ //假设的最小值大于arr[j]
min = arr[j];
minIndex = j;
}
}
if (minIndex != i){ //如果最小元素的下标不等于假设最小元素的下标
arr[minIndex] = arr[i];
arr[i] = min;
}
}
}
插入排序
插入排序介绍和实现
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
插入排序图解
具体代码实现
public static void insertSort(int[] arr){
//定义待插入的数
int insertVal = 0;
int insertIndex = 0;
for (int i = 0; i < arr.length - 1; i++) {
insertVal = arr[i+1];
insertIndex = i;
// 给 insertVal 找到插入的位置
// 1. insertIndex >= 0 保证在给 insertVal 找插入位置,不越界
// 2. insertVal < arr[insertIndex] 待插入的数,还没有找到插入位置
// 3. 需要将 arr[insertIndex] 后移
while (insertIndex >= 0 && insertVal < arr[insertIndex]){
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
// 当退出 while 循环时,说明插入的位置找到, insertIndex + 1
if (insertIndex + 1 != i){
arr[insertIndex + 1] = insertVal;
}
}
}
以上是关于排序算法之冒泡选择插入排序(Java)的主要内容,如果未能解决你的问题,请参考以下文章