插入排序
实现代码
public static void insertSort(int[] array){
for (int i=1;i<array.length;i++){//将第一个作为有序列,从第二个开始
if (array[i]<array[i-1]){
//一旦前数较大,就进行前移一位,然后继续和前一位比较,直至到了第一
//个或者没有比他更小的了,这样就完成插入,有序列变长,直到无序列为0.
int temp=array[i];
for (int j=i-1;j>=0 && array[j]>temp;j--){
array[j+1]=array[j];
array[j]=temp;
}
}
}
}
测试代码
public static void main(String[] args) {
int[] r= {12,15,9,20,6,31,24};
insertSort(r);
System.out.println(Arrays.toString(r));
}
测试结果
[6, 9, 12, 15, 20, 24, 31]
希尔排序
实现代码
public static void shellSort(int[] r) {
int len=r.length;
int t=0;
//以增量d进行直接插入法,这也是希尔排序改进的地方
for (int d = len/2; d>0; d=d/2) {
for (int i = d; i < len; i++) {
for (int j = i-d; j >= 0 ; j-=d) {
if (r[j]>r[j+d]) {
t=r[j];
r[j]=r[j+d];
r[j+d]=t;
}
}
}
}
测试代码
public static void main(String[] args) {
int[] r= {59,20,17,36,98,14,23,83,13,28};
shellSort(r);
System.out.println(Arrays.toString(r));
}
测试结果
[13, 14, 17, 20, 23, 28, 36, 59, 83, 98]
冒泡排序
实现代码&&测试代码
public class Bubble {
public static void main(String[] args) {
int[] arr= {50,13,55,97,27,38,49,65};
int temp=0;
for (int i = 0; i < arr.length; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[i]>arr[j]) {
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
测试结果
[13, 27, 38, 49, 50, 55, 65, 97]
快速排序
实现代码
//第一次划分
public static int Partition(int r[],int first,int end) {
int t=0;
while (end>first) {
//往左侧扫描
while(end>first&&r[end]>=r[first]) end--;
//出现左大右小时,交换位置,移动左边下标
if (end>first) {
t=r[first];
r[first]=r[end];
r[end]=t;
first++;
}
//往右侧扫描
while (end>first&&r[end]>=r[first]) first++;
//出现左大右小时,交换位置,移动右边下标
if (end>first) {
t=r[first];
r[first]=r[end];
r[end]=t;
end--;
}
}
return end;//当end=first时,第一次划分完成,返回值给pivot
}
public static void quickSort(int r[],int first,int end) {
if (end>first) {
//执行一次划分,再进行二分子序列的递归划分,直到子序列只有一个元素时停止。
int pivot=Partition(r, first, end);
quickSort(r, first, pivot-1);
quickSort(r, pivot+1, end);
}
}
测试代码
public static void main(String[] args) {
int[] r= {23,13,49,6,31,28};
int first=0;
int end=r.length-1;
quickSort(r, first, end);
System.out.println(Arrays.toString(r));
}
测试结果
[6, 13, 23, 28, 31, 49]
选择排序
实现代码
public static void selectSort(int r[]) {
int index=0,t=0;
for (int i = 0; i < r.length; i++) {//扫描
index=i;
for (int j = 1+i; j < r.length; j++) {
if (r[index]>r[j]) index=j;//记录最小值的小标
}
//将该趟的最小值送到有序区
if (index!=i) {
t=r[i];
r[i]=r[index];
r[index]=t;
}
}
}
测试代码
public static void main(String[] args) {
int[] r= {49,27,65,97,76,13,38};
selectSort(r);
System.out.println(Arrays.toString(r));
}
测试结果
[13, 27, 38, 49, 65, 76, 97]
参考
[ 1 ] 数据结构 第2版
[ 2 ]这位博主大哥的排序算法很全,还有动画演示,强推!!!
个人建议:还是不是很懂的话,就在不清楚的地方输出一下,纸上演排一下。