比较数组的四种排序方式
package JAVA_Project_01_04;//创建一个包
/*
常用的排序方法有冒泡排序、快速排序、选择排序、插入排序、希尔排序、堆排序
冒泡排序是依次比较相邻的两个数,将大树放在前面,小数放在后面。即首先比较第一个和第二个数,将大数放前,小数放后。
如此继续,直至比较最后两个数,将大树放前,小数放后。然后下一行再进行重复操作。
选择排序是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已经排好序的数列的最后,直到全部
待排序的数据元素排完。选择排序是不稳定的排序方法。
插入排序把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。
在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的正确位置中。
希尔排序是插入排序的一种。基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成的d1个组。所有距离
d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上溯的分组和排序,直到所取的增量dt=1(dt<dt-1<......<d2<d1),
即所有记录放在同一组中进行直接插入排序为止。
*/
public class TextSort {//操作排序的类
public static void bubbleSort(int[]x){//冒泡排序
for (int i = 0; i < x.length; i++) {
for (int j = i+1; j < x.length; j++) {
if (x[i]>x[j]){//将下标为i的数与下标为j的数进行比较
int temp=x[i];
x[i]=x[j];//元素交换
x[j]=temp;
}
}
}
for (int i = 0; i < x.length; i++) {//循环将重新排序的结果输出
System.out.println(x[i]+"");
}
}
public static void selectSort(int[]x){//选择排序
for (int i = 0; i < x.length; i++) {
int lowerIndex=i;
for (int j = i+1; j < x.length; j++) {//循环找出最小的一个索引
if (x[j]<x[lowerIndex]){
lowerIndex=j;
}
}
int temp=x[i];
x[i]=x[lowerIndex];
x[lowerIndex]=temp;
}
for (int i = 0; i < x.length; i++) {//循环将重新排序的结果输出
System.out.println(x[i]+"");
}
}
public static void insertSort(int[]x){//插入排序
for (int i = 1; i < x.length; i++) {//i从1开始,因为第一个数已经是排序好的
for (int j = i; j >0 ; j--) {
if (x[j]<x[j-1]){
int temp =x[j];//元素交换
x[j]=x[j-1];
x[j-1]=temp;
}
}
}
for (int i = 0; i < x.length; i++) {//循环将重新排序的结果输出
System.out.println(x[i]+"");
}
}
public static void shellSort(int[]x){//希尔排序
for (int increment = x.length/2; increment >0; increment/=2) {//循环进行分组
for (int i = increment; i < x.length; i++) {//循环每个组内排序
int temp=x[i];
int j=0;
for (j = i; j>increment; j-=increment) {
if (temp<x[j-increment]){//元素进行判断、交换
x[j]=x[j-increment];
}
else {
break;
}
}
x[j]=temp;
}
}
for (int i = 0; i < x.length; i++) {//循环将重新排序的结果输出
System.out.println(x[i]+"");
}
}
public static void main(String[] args) {//Java主入口
int[]arr={1,5,6,12,4,9,3,23,39,403,596,87};
System.out.println("----冒泡排序的结果:");
bubbleSort(arr);//调用方法
System.out.println();
System.out.println("----选择排序的结果:");
selectSort(arr);//调用方法
System.out.println();
System.out.println("----插入排序的结果:");
insertSort(arr);//调用方法
System.out.println();
System.out.println("----希尔排序的结果:");
shellSort(arr);//调用方法
}
}
/*
在bubbleSort()方法中,运用双重循环对数组进行冒泡排序。其中i,j控制数组的元素。将下标为i的元素与下标为j的元素进行比较,将较小的元素与较大的元素依次用中间变量进行转换。
得到的结果是较小的元素在前,较大的元素在后。然后排好序的数组元素打印到控制台。
在selectSort()方法中,运用选择排序法对数组进行排序。方法中第一层循环从起始位置开始选到最后一个元素,
主要是在每次进入第二层循环之前,将外层循环的下标赋值给临时变量lowerIndex,接下来在第二层循环中,如果发现有比下标为lowerIndex更小的元素,
则将赋值给lowerIndex,最后,在二层循环退出后,如果临时变量改变,则说明有比当前外层循环位置更小的元素,需要将这两个元素交换。
在insertSort()方法中,运用插入排序对数组进行排序。从第一个元素开始,该元素可以认为已经被排序。循环取出下一个元素,
在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于新元素,则将该元素移到下一位置,重复进行操作,
直到找到已排序的元素小于或者等于新元素的位置,再将新元素插入到该位置中。
在shellSort()方法中,先将数组进行分组,对分得的每个小组进行组内排序。在每个小组内对元素进行比较,
将每个小组组内的元素由小到大进行排序。再次循环分组,直到元素排序完毕。
*/