一 选择排序
思想:每次从需要排序的序列中找出一个最小的数,将其放在序列开始的位置,然后将序列开始的位置后移一位,每次排序下来有序序列中都会多一个数据,直到需要排序的序列全部有序。
代码:
for(int i = 0 ; i < array.length - 1 ;i++){
//每轮比较多少次
for(int j = 0 ; j < array.length - 1 - i;j++){
//前后相比 前面大于后面交换
if(array[j] > array[j+1]){
double temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
可以每趟排序找出序列最小数放在序列开头,找出序列最大数放在序列末尾,可以提高速率,
具体代码可以看六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序_冒泡排序,快速排序,希儿排序,堆排序 需要额外辅助空间_双鱼211的博客-CSDN博客
二 冒泡排序
思想:从序列起始位置开始,每次比较相邻两个位置,在相邻两个数中,如果前一个大于后一个,则将他们两个位置交换。
代码:
for(int i = 0 ; i < array.length - 1 ;i++){
//每轮比较多少次
for(int j = 0 ; j < array.length - 1 - i;j++){
//前后相比 前面大于后面交换
if(array[j] > array[j+1]){
double temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
三 快速排序
思想:
1.以序列中的最左(最右)作为快速排序的基准数
2.从右往左查找,找到第一个比基准数小的数据,记录该位置为 j
3.从左往右查找,找到第一个比基准数大的数据,记录该位置为 i
4.如果 i < j ,则交换 i 位置和 j位置的值。
5.重复 2 - 3 - 4 步骤,直到 i = j,然后交换基准数位置和 i[j]位置的值。
6.将i[j]左半区和右半区分别重复以上 1 - 2 - 3 - 4 - 5步骤
7.当快速排序的区间left >= right,证明区间中只剩下一个数,或者区间不存在,则结束快速排序
代码:
public static void quickSort(double value[],int left,int right){
//判断快速排序结束的时间点
if(left >= right){
return;
}
//定义基准数
double base = value[left];
int i = left;
int j = right;
//找到第一个比基准数小的数据
while(i < j){
while(value[j] >= base && i < j){
j--;
}
while(value[i] <= base && i < j){
i++;
}
if(i < j){
double temp = value[i];
value[i] = value[j];
value[j] = temp;
}
}
//交换 i[j] 和基准数位置的值
double temp = value[i];
value[i] = base;
value[left] = temp;
//左半区
quickSort(value,left,i-1);
quickSort(value,i+1,right);
}