一、排序算法基本概述
二、交换类排序–冒泡法
public void bubbleWay(int a[]){
for(int i =1; i < a.length; i++){ //比较次数
for(int j = 0;j <a.length-i;j++){
if(a[j] > a[j+1]){
int temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
}
三、选择类排序–简单选择排序
public void selectWay(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[min] > a[j]){
min = j;
}
}
int temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
四、插入类排序–直接插入
public void directInsertway(int a[]){
for(int i = 1; i <a.length; i++){
int temp = a[i], j;
for(j = i - 1;j >= 0 && temp < a[j]; j--){
a[j+1] = a[j];
}
a[j+1] = temp;
}
}
四、插入类排序–希尔排序
希尔排序是插入排序的升级版,具体思路如下。
相关代码如下:
public void hillInsertSort(){
int gap = 1;
while(gap < nodes.size()/3) gap = 3*gap + 1;
while(gap >= 1) {
for (int i = gap; i < nodes.size(); i++) {
for (int j = i; j >= gap; j -= gap) {
if (nodes.get(j).getData().compareTo(nodes.get(j - gap).getData()) < 0) {
HeapDataStructure temp = nodes.get(j);
nodes.set(j,nodes.get(j - gap));
nodes.set(j - gap,temp);
}
}
}
gap = gap/3;
}
}