常见的排序方式有以下:
1.冒泡排序(交换)(相邻元素比较)
2.选择排序(交换)(依次拿首个元素与后面所有元素比较)
3.快速排序 (交换)
4.堆排序
5.基数排序
6.插入排序
7.(shell)希尔排序
不稳定排序:相同数值的元素顺序排序会改变
例如:3
6 3 4 2
第一次交换:
---->2 6 3 4 3
3与2交换(第一个三的位置排到了最后)
第二次交换:
---->2 3 6 4 3
第三次交换
—>2 3 3
4 6
可见3
与3的位置交换了,所以不稳定。
稳定排序:相同数值的元素顺序排序不会改变
冒泡排序
稳定排序
这种方式是让依次两个元素相比较,然后相邻元素交换位置。
public void maoPaoSort(int [] array){
int temp;
int count=0;
System.out.println("原数组:"+ Arrays.toString(array));
//冒泡排序:相邻两个元素比较大小,然后交换位置。
/*
1 3 6 0 9
1 3 0 6 9 第0次 比较4次
1 0 3 6 9 第1次 比较3次
0 1 3 6 9 第2次 比较2次
比较次数:5-i-1
*/
for (int i=0;i<array.length-1;i++){
flag=true;
for (int j=0;j<array.length-i-1;j++){
//外层遍历所有元素
count++;
//在本纬度中相比较
if (array[j]>array[j+1]){
temp=array[j+1];
array[j+1]=array[j];
array[j]=temp;
}
//依次比较相邻元素
}
System.out.println("新数组:"+ Arrays.toString(array)+",比较了"+count);
}
}
运行结果
选择排序
不稳定排序
让首个元素依次与后面的元素比较,然后交换元素,这样能保证首个元素是该数组中最小的元素。依次执行,实现排序。
public void chooseSort(int []array){
//选择排序,用首元素依次与后面所有元素比较,把小的放置首位依次排列。
int temp;
int count=0;
boolean flag;
System.out.println("原数组:"+ Arrays.toString(array));
for (int i=0;i<array.length;i++){
// flag=true;
for (int j=i+1;j<array.length;j++){
//在两个纬度中相比较
count++;
if (array[i]>array[j]){
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
System.out.println("新数组:"+Arrays.toString(array)+",比较次数:"+count);
}
}
}
运行结果
快速排序
不稳定排序