常见排序算法:
• 选择排序
• 直接选择排序、 堆排序
• 交换排序
• 冒泡排序、 快速排序
• 插入排序
• 直接插入排序、 折半插入排序、 Shell排序
• 归并排序
• 桶式排序
• 基数排序
输入( Input) 有0个或多个输入数据,这些输入必须有清楚的描述和定义
输出( Output) 至少有1个或多个输出结果,不可以没有输出结果
有穷性(有限性, Finiteness) 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
确定性(明确性, Definiteness) 算法中的每一步都有确定的含义,不会出现二义性
可行性(有效性,Effectiveness) 算法的每一步都是清楚且可行的,能让用户用纸笔计算而求出答案
https://visualgo.net/zh/sorting
冒泡排序
冒泡排序算法的运作如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {58,63,35,39,27,32,98,5,68};
for(int x = arr.length - 1 ; x >= 0 ;x--){
for(int i = 0 ; i < x ; i++){
if(arr[i] > arr[i + 1]){// 元素两两比较 如果前者大于后者 则交换两个元素的 位置
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1 ] = temp;
}
}
}
/* for(int i = 0 ; i < arr.length -2 ; i++){
if(arr[i] > arr[i + 1]){// 元素两两比较 如果前者大于后者 则交换两个元素的 位置
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1 ] = temp;
}
}
for(int i = 0 ; i < arr.length -3 ; i++){
if(arr[i] > arr[i + 1]){// 元素两两比较 如果前者大于后者 则交换两个元素的 位置
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1 ] = temp;
}
}
for(int i = 0 ; i < arr.length -4 ; i++){
if(arr[i] > arr[i + 1]){// 元素两两比较 如果前者大于后者 则交换两个元素的 位置
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1 ] = temp;
}
}*/
// 进行数组的遍历
for (int j : arr){
System.out.println(j);
}
}
}
快速排序
public class QuickSort {
public static void main(String[] args) {
int[] arr = {58,63,35,39,27,32,98,5,68};
quick(arr);
for(int x : arr){
System.out.println(x);
}
}
//快速排序的入口 该方法针对 数组排序 所以需要你传递给该方法一个数组
public static void quick(int[] arr){
if(arr == null || arr.length ==0 || arr.length == 1){
return;
}else{
sort(arr,0,arr.length -1);
}
}
// 快速排序的核心算法
public static void sort(int[] arr,int left,int right){
int len = arr.length;
if(left > right){
return;
}
int base = arr[left];
int i = left;
int j = right;
while(i != j ){
// 从左开始 依次使用左边的元素和基准元素进行比较 直到找到比基准元素大的元素
while(arr[i] < base && i < j){
i++;
}
// 从右边开始 依次使用右边的元素和基准元素进行比较 直到找到比基准元素小的 元素
while(arr[j] > base && i < j){
j--;
}
if(i < j ){
int temp = arr[i];
arr[i]= arr[j];
arr[j] = temp;
}
}
sort(arr,0,i -1);
sort(arr,i + 1 , right);
}
}