概述
快速选择排序算法也是一种简单的排序方法。他能快速实现一组数的排序方式。当然,和冒泡排序一样,快速选择排序也有升序和降序。其实大多排序方法都有升序和降序。本文以升序为例子展开讲解。
基本思想
快速选择排序的基本思想是分为两个区,一个叫有序区一个叫无序区。给定数组有六位数{58,69,88,-79,90,82}。先设定一个索引,作为最小的值。一般刚开始以无序区第一位元素的索引为最小索引。然后该索引的数和后面剩余的数一个个做比较,与剩余数中最小的数交换位置,把最小的数置于有序区中。第二次也以无序区第一位元素为最小索引,该索引与后面剩余的数做比较,与最小的数交换位置把最小的数置于有序区中,排在第一次排序后。重复循环后就会得出一组从小到大排列的数。
排序位置详解
原始数据:{58,69,88,-79,90,82}
经过第一次排序后数据:{-79,69,88,58,90,82}
经过第二次排序后数据:{-79,58,88,69,90,82}
经过第三次排序后数据:{-79,58,69,88,90,82}
经过第四次排序后数据:{-79,58,69,82,90,88}
经过第五次排序后数据:{-79,58,69,82,88,90}
经过五次排序后,排序完成。
如图所示
快速排序的算法
int min;//最小索引
int temp;//中间介质
System.out.println("直接选择排序(升序):");
for (int i = 0; i < arr.length-1; i++) {//控制循环次数
min = i;
for (int j = i+1; j < arr.length; j++) {//从无序区选取最小的记录
if (arr[min]>arr[j]) {//如果最小数索引的数比后面的数大就和该数交换索引
min=j;//交换索引,循环重复后得出最小的数的索引
}
}
if (min != i) {//如果最小数的索引和一开始引用的数的索引不想等,那么就做一个替换。
temp = arr[i];//把一开始引用的数传给中间介质
arr[i] = arr[min];//把最小数传到一开始定位的位置
arr[min] = temp;//把中间介质传给最小数
}
}
for (int i = 0; i < arr.length; i++) {//再次遍历数组输出数据
System.out.print(arr[i]+" ");
}
降序的直接排序源码
int max;//最大值索引
int temp;//中间介质
System.out.println("\n直接选择排序(降序):");
for (int i = 0; i < arr.length-1; i++) {//控制循环次数
max = i;
for (int j = i+1; j < arr.length; j++) {//从无序区选取最小的记录
if (arr[max]<arr[j]) {
max=j;
}
}
if (max != i) {
temp = arr[i];
arr[i] = arr[max];
arr[max] = temp;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
升序降序全部源码
public class ZhiJie {
public static void paiXu(int[] arr){
int min;//最小索引
int temp;//中间介质
int max;//最大值索引
System.out.println("直接选择排序(升序):");
for (int i = 0; i < arr.length-1; i++) {//控制循环次数
min = i;
for (int j = i+1; j < arr.length; j++) {//从无序区选取最小的记录
if (arr[min]>arr[j]) {
min=j;
}
}
if (min != i) {
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println("\n直接选择排序(降序):");
for (int i = 0; i < arr.length-1; i++) {//控制循环次数
max = i;
for (int j = i+1; j < arr.length; j++) {//从无序区选取最小的记录
if (arr[max]<arr[j]) {
max=j;
}
}
if (max != i) {
temp = arr[i];
arr[i] = arr[max];
arr[max] = temp;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
测试源码
public class Test {
public static void main(String[] args) {
int[] arr = {58,69,88,-79,90,82};//定义数组
ZhiJie.paiXu(arr);//调用类里的方法
}
}
测试截图:
今天讲解就到这里,喜欢的小伙伴点点关注点个赞,要是有错误的地方欢迎指正!!!