冒泡排序:
口诀:相邻比较,外层循环n-1,里层循环n-1-i.
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;
}
}
}
选择排序:
口诀:前后比较,外层起点0,里层起点i+1
for(int i = 0 ; i < array.length - 1 ;i++){
//每轮比较多少次
for( int j = i+1; j <= array.length - 1 ; j++ ){
if(array[i] > array[j]){
double temp = array[j];
array[j] = array[i];
array[i] = 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);
}