稳定性:选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法;
冒泡排序:冒泡排序就是把小的元素往前调或者把大的元素往后调。相邻的元素交换。稳定排序
选择排序:从0位置开始给每个位置选择当前元素最小的元素。不稳定
插入排序:在一个已经有序的小序列的基础上,一次插入一个元素。初始序列为0位置上的元素,依次插入后边的元素。稳定
代码实现:
public class SortAlgorithm {
/**
* @ 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SortAlgorithm sg=new SortAlgorithm();
System.out.println("hello,world!");
int[] arr={1,2,4,5,66,7,88,9,18};
sg.printOrder(arr);
System.out.println();
sg.bubblingSort(arr);//冒泡排序
sg.insertSort(arr);//插入排序
sg.selectSort(arr);//选择排序
}
//插入排序
private void insertSort(int[] arr) {
// TODO Auto-generated method stub
int len=arr.length;
for(int i=0;i<len-1;i++){
for(int j=i+1;j>0;j--){
if(arr[j]<arr[j-1]){
swep(arr,j,j-1);
}
}
}
this.printOrder(arr);
}
//选择排序
private void selectSort(int[] arr) {
// TODO Auto-generated method stub
int len=arr.length;
for(int i=0;i<len-1;i++){
for(int j=i+1;j<len;j++){
if(arr[i]>arr[j]){
swep(arr,i,j);
}
}
}
this.printOrder(arr);
}
//冒泡排序
private void bubblingSort(int[] arr) {
// TODO Auto-generated method stub
int len=arr.length;
for(int i=0;i<len-1;i++){
for(int j=0;j<len-i-1;j++){
if(arr[j]>arr[j+1]){
swep(arr,j,j+1);
}
}
}
printOrder(arr);
}
//交换位置
private void swep(int[] arr, int i, int j) {
// TODO Auto-generated method stub
int tmp=0;
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
//打印数组
private void printOrder(int[] arr) {
// TODO Auto-generated method stub
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}