排序算法
2023-09-14 09:00:42 时间
【简单记忆】
* 冒泡排序是从左边第一个数开始,向右,相邻的两个数比较交换位置
* 选择排序是从左边第一个数开始,单独和右边所有数比较
* 插入排序是从左边第二个数开始,单独和左边所有数比较
* 快速排序是每轮设置一个关键值,按照右左右左的方向将比关键值小的排列在其左边,将比关键值大的排列在其右边
1.冒泡排序
//数组总长度
int length = array.length;
//length -1 轮
for(int i = 1;i<length;i++){
//从第二个数开始交换
for(int focus = 1;focus < length;focus ++){
//交换实现左小右大
if(array[focus -1 ]>array[focus]){
int temp = array[focus];
array[focus] = array[focus - 1];
array[focus -1 ] = temp;
}
}
}
2.选择排序
// 从最左边开始
for (int i = 0; i < array.length - 1; i++) {
// 依次将i右边的数和min进行比较
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[i]) {
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
3.插入排序
//从左边第二个数开始
for(int i = 1;i<array.length;i++){
//依次将i和左边的数比较,实现左边小右边大
for(int j = 0;j<i;j++){
if(array[i]<array[j]){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
4.快速排序
public class QuickSort {
public static void main(String[] args) {
int [] array = {49,38,65,97,76,13,27};
quickSort(array, 0, array.length - 1);
//打印最终结果
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
/*先按照数组为数据原型写出算法,再写出扩展性算法。数组{49,38,65,97,76,13,27}
* */
public static void quickSort(int[]n ,int left,int right){
int pivot;
if (left < right) {
//pivot作为枢轴,较之小的元素在左,较之大的元素在右
pivot = partition(n, left, right);
//对左右数组递归调用快速排序,直到顺序完全正确
quickSort(n, left, pivot - 1);
quickSort(n, pivot + 1, right);
}
}
public static int partition(int[]n ,int left,int right){
int pivotkey = n[left];
//每轮排序的枢轴不变,一般取第一个值,最终枢轴在中间,前小后大
while (left < right) {
//每次排序先从右往左,将一个小于枢轴的数放在枢轴的位置上
while (left < right && n[right] >= pivotkey){
--right;
}
n[left] = n[right];
//然后从枢轴目前所在位置往右,将一个大于枢轴的数放在上面的right位置上
while (left < right && n[left] <= pivotkey){
++left;
}
n[right] = n[left];
}
//当最终left和right位置重合时,完成一趟快速排序,此时left位相当于空,等待pivotkey补上
n[left] = pivotkey;
return left;
}
}
相关文章
- hdu2063 最大二分匹配(匈牙利算法)
- 内部排序算法:基数排序
- 数据结构常见的八大排序算法
- Java实现 LeetCode 561 数组拆分 I(通过排序算法改写PS:难搞)
- Java实现 蓝桥杯 算法提高 快速排序
- java实现Kruskal算法
- Java实现 蓝桥杯VIP 算法提高 促销购物
- Java实现 蓝桥杯VIP 算法提高 大数加法
- Java实现 蓝桥杯VIP 算法训练 判定数字
- Java实现 蓝桥杯 算法训练 排序
- Python实现的选择排序算法原理与用法实例分析
- 教你用Python实现简单监督学习算法
- 算法练习之将有序数组转换为二叉搜索树,平衡二叉树
- Python排序搜索基本算法之归并排序实例分析
- 算法入门--快速排序
- 数据结构和算法-排序算法-希尔排序
- (算法)Trapping Rain Water II
- 【算法】插入排序(Insertion Sort)
- ML之R:通过数据预处理利用LiR/XGBoost等(特征重要性/交叉训练曲线可视化/线性和非线性算法对比/三种模型调参/三种模型融合)实现二手汽车产品交易价格回归预测之详细攻略
- ML之PLiR之LARS:利用LARS算法求解ElasticNet回归类型(包括类别编码+属性重要程度排序)问题(实数值年龄预测)
- 基于Multi-Verse Optimizer(MVO)多元宇宙优化的DBSCAN数据聚类算法matlab仿真
- 基于GOA蚱蜢优化算法的KNN分类器最优特征选择matlab仿真
- 五大常用算法学习笔记
- 算法——基础篇——高速排序
- 2144. 打折购买糖果的最小开销-快速排序+贪心算法
- 从两个排序算法实现c++策略模式
- Python编程:排序算法之归并排序
- 数据结构与算法——插入类排序(直接插入排序,希尔排序)
- 白话经典算法系列之六 高速排序 高速搞定
- 【数据挖掘】十大算法之Apriori关联算法
- DSA之十大排序算法第十种:Radix Sort