冒泡排序:
排序原理:
1.比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。
2.对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值.
![](https://i-blog.csdnimg.cn/blog_migrate/86a78c1cb844f769a6fd3eda3fd57c1b.png)
//冒泡排序的方法
package SuanFa01;
//2冒泡排序
public class Bubble {
public static void sort(Comparable[] a){
for(int i=a.length-1;i>0;i--){
for(int j=0;j<i;j++){
if (greater(a[j],a[j+1])){
exch(a,j,j+1);
}
}
}
}
//比较大小的方法
private static boolean greater(Comparable a,Comparable b){
return a.compareTo(b)>0;
}
//互换位置的方法
private static void exch(Comparable[] a,int c,int d){
Comparable temp;
temp = a[c];
a[c] = a[d];
a[d] = temp;
}
}
//实验模块
package SuanFa02;
import SuanFa01.Bubble;
import java.lang.reflect.Array;
import java.util.Arrays;
public class BubbleTest {
public static void main(String[] args) {
Integer[] arr = {1,5,8,9,7,4};
Bubble.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/56a3a01011fe62ccc13d28534dfde1fe.png)
选择排序:
选择排序是一种更加简单直观的排序方法
需求:
排序前:(4,6,8,7,9,2,10,1}
排序后:1,2,4,5,7,8,9,10)
排序原理:
1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引。
交换第一个索引处和最小值所在的索引处的值。
![](https://i-blog.csdnimg.cn/blog_migrate/72b230c91fddca4ce8e2ddcee22ef4f5.png)
//选择排序的方法
package SuanFa01;
public class Selection {
public static void sort(Comparable[] a){
for(int i=0;i<=a.length-2;i++){
int minIndex = i;
for (int j=i+1;j<a.length;j++){
if (greater(a[minIndex],a[j])){
minIndex=j;
}
}
exch(a,i,minIndex);
}
}
private static boolean greater(Comparable a,Comparable b){
return a.compareTo(b)>0;
}
private static void exch(Comparable[] a,int c,int d){
Comparable temp;
temp = a[c];
a[c] = a[d];
a[d] = temp;
}
}
//实验模块
package SuanFa02;
import SuanFa01.Selection;
import java.lang.reflect.Array;
import java.util.Arrays;
public class SelectionTest {
public static void main(String[] args) {
Integer[] arr = {1,8,99,37,5,6,4,9,7};
Selection.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/8ce84598f479be54a5702b7f1d7b623d.png)
插入排序:
插入排序(Insertion sort)是一种简单直观且稳定的排序算法
插入排序的工作方式非常像人们排序一手扑克牌一样。开始时,我们的左手为空并且桌子上的牌面朝下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。
排序原理:
1.把所有的元素分为两组,已经排序的和未排序的
2.找到未排序的组中的第一个元素,向已经排序的组中进行插入;
3.倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他的元素向后移动一位。
![](https://i-blog.csdnimg.cn/blog_migrate/d5bf7cb12f6aa1e50052b853e52283e9.png)
//插入排序的方法
package SuanFa01;
public class Insertion {
public static void sort(Comparable[] a){
for (int i=1;i<a.length;i++){
for (int j=i;j>=0;j--){
if(greater(a[j-1],a[j])){
exch(a,j-1,j);
}else {
break;
}
}
}
}
private static boolean greater(Comparable a,Comparable b){
return a.compareTo(b)>0;
}
private static void exch(Comparable[] a,int c,int d){
Comparable temp;
temp = a[c];
a[c] = a[d];
a[d] = temp;
}
}
//实验模块
package SuanFa02;
import SuanFa01.Insertion;
import java.util.Arrays;
public class InsertionTest {
public static void main(String[] args) {
Integer[] arr = {1,5,8,9,6,3,2,88,99};
Insertion.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
结果:
![](https://i-blog.csdnimg.cn/blog_migrate/acc6f8cc6a38321305744c40650abe41.png)