冒泡排序:
- 核心思想:每一轮找出最大的元素放在数组的最后面。
public static void BubbleSort(int[] a){
//外层循环,找每一轮的最大数放在末尾
for(int i=0;i<a.length;i++){
//内层循环,遍历数组,比较得出最大值
for(int j=0;j<a.length-i-1;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
插入排序:
- 核心思想:将数组分为已排序和未排序两部分,未排序的首位m要依次与已排序数组进行比较(从后往前),大的就向后挪一位,直到m比前一位大,m就放在那。
public static void InsertSort(int[] a){
//外层循环,把每轮未排序的首位进行排序
for(int i=1;i<a.length;i++){
int value=a[i];
int j=i-1;
for(;j>=0;i--){
if(value<a[j]){
a[j+1]=a[j]; //大的就往后挪一位
}else{
break;
}
}
a[j+1]=value;
}
}
选择排序:
- 核心思想:同样分为已排序和未排序区间,但这次是从未排序区间内进行遍历找出每轮的最小值,然后和已排序区间的末尾进行交换。
public static void SelectSort(int[] a){
//外层循环以 已排序区间的末尾 作为比较交换对象
for(int i=0;i<a.length-1;i++){
int min=i;
//内层循环在未排序区间中进行遍历,找出最小值的索引,最后再将该值进行交换。
for(int j=i+1;j<a.length;j++){
if(a[j]<a[min]){
min=j;
}
}
int temp=a[min];
a[i]=a[min];
a[min]=temp;
}
}