常用的排序算法及其适用场景
一、排序的具体应用
1、淘宝商品价格排序:商品按价格高低排序后显示;租房时看价格,从低到高;
2、微博热搜排行榜:排序后,最高的十个关键字,上热搜
3、QQ好友列表:按照好友名字的排序(涉及字符排序)
4、超星移动图书馆热书榜:排序后,最高的十本书为热书
https://blog.csdn.net/dingpiao190/article/details/72674199
二、选择排序——取商品的价格
1.升序
public class choose {
public static void main(String[] args) {
// double[] arr = {50.60,65.344,42.9,94,12,33,61};
//float的数后面必须加f
//选择排序
/*
思路:1.拿第一个元素与后面的比较,把小的放在第一个,进行位置互换
2.拿第二个元素与后面的比较,把小的放在第二个,进行位置互换
......
*/
//1.升序
//取商品的价格
float[] arr2 = {50,61.10f,72.9f,80,77.777f,45.31f};
//控制排序的次数n
for (int i = 0; i <arr2.length -1 ; i++) {
//取第一个数为最小的数的位置
int min= i;
//寻找最小的数
for(int j = i+1 ;j <arr2.length ;j++){
if (arr2[min] > arr2[j]){
//记录目前能找到的最小值元素的下标
min = j;
}
}
//将找到的最小值和i位置所在的值进行交换
if (i != min){
float temp = arr2[i];
arr2[i] = arr2[min];
arr2[min] = temp;
}
}
//第 i轮排序的结果为
System.out.print("排序后的结果为:"+ Arrays.toString(arr2));
}
}
2.降序
//2.降序
//取商品的价格
float[] arr2 = {50,61.10f,72.9f,80,77.777f,45.31f};
//控制排序的次数n
for (int i = 0; i <arr2.length -1 ; i++) {
//取第一个数为最小的数的位置
int min= i;
//寻找最小的数
for(int j = i+1 ;j <arr2.length ;j++){
if (arr2[min] < arr2[j]){
//记录目前能找到的最小值元素的下标
min = j;
}
}
//将找到的最小值和i位置所在的值进行交换
if (i != min){
float temp = arr2[i];
arr2[i] = arr2[min];
arr2[min] = temp;
}
}
//第 i轮排序的结果为
System.out.print("排序后的结果为:"+ Arrays.toString(arr2));
}
}
三、冒泡排序——给同学们按身高排座位
public class PaiXu {
public static void main(String[] args) {
//冒泡排序——给同学们按身高排座位
/*
思路:1.第一个与第二个比,大的放第二个
2.第二个与第三个比,大的放第三个
*/
int[] arr = {178, 162,174,166,184,171,175, 177,169};
//控制循环次数n
for (int i = 0;i < arr.length;i++){
//每排序依次,就少一次
for (int j = 0;j < arr.length -1-i ;j++){
if (arr[j]> arr[j+1]){
int temp = arr[j];
arr[j]= arr[j+1];
arr[j + 1] = temp;
}
}
}
System.out.println("排序后:");
//数组输出
System.out.println(Arrays.toString(arr));
}
}
四、插入排序
1.基本排序方法
public class ChaRu {
public static void main(String[] args) {
//插入排序
/*
思路:
1.第一个数字默认已经排序
2.取第二个数与第一个比较,然后排序
3.取第三个数与前两个数比较,然后比较
......
*/
int[] arr = {345,78,98,67,56,77};
int j;
//第一层循环:控制比较次数
for (int i = 1; i < arr.length; i++) {
int temp = arr[i];
j = i;
while (j > 0 && temp < arr[j - 1]) {
arr[j] = arr[j - 1]; //向后挪动
j--;
}
//存在更小的数,插入
arr[j] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
2.给中文姓名排序
public class NameSort {
public static void main(String[] args) {
String[] a = {"王五", "李四", "张三", "刘六", "白一", "苦二"};
getSortOfChinese(a);
/*for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}*/
System.out.println(Arrays.toString(a));
}
//定义排序函数
public static String[] getSortOfChinese(String[] a) {
// Collator 类是用来执行区分语言环境这里使用CHINA
Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
// JDKz自带对数组进行排序。
Arrays.sort(a, cmp);
return a;
}
}
3.英文名排序
public class NameSort2 {
public static void main(String[] args) {
String[] a = {"Andy", "VBay", "Cbby", "Jim", "Tom", "Harry"};
getSortOfChinese1(a);
/*for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}*/
System.out.println(Arrays.toString(a));
}
//定义排序函数
public static String[] getSortOfChinese1(String[] a) {
// Collator 类是用来执行区分语言环境这里使用ENGLISH
Comparator cmp = Collator.getInstance(Locale.ENGLISH);
// JDKz自带对数组进行排序。
Arrays.sort(a, cmp);
return a;
}
}

浙公网安备 33010602011771号