1. 直接选择排序:设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出最小数,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。选择排序是不稳定的排序方法。
java的实现如下:
static void selectSort(int[] arr){
for(int i=0; i<arr.length-1; i++){
//找最小数
int min = arr[i];
int pos = i;
for(int j=i+1; j<arr.length; j++){
if(arr[j]<min) {
min = arr[j]; //为了下一次比较
pos = j; //为了记住最小数的角标
}
}
//换位置
exchange(arr, i, pos);
}
}
2. 冒泡排序:从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部。扫描R[2..n]。扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上……执行n-1趟后就完成了记录序列的排序。冒泡排序是一种稳定排序算法。
static void bubbleSort(int[] arr){
for(int i=0; i<arr.length-1; i++){
for(int j=arr.length-1; j>i; j--){
if(arr[j]<arr[j-1])
exchange(arr, j, j-1);
}
}
}
3. 直接插入排序:每次从无序表(原先没排好序的队列)中取出第一个元素,把它插入到有序表(排序后的,比如第一趟,那么前面两个就是有序表,以此类推,第二趟,前面三个就是有序表)的合适位置,使有序表仍然有序。第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后(或从后向前)扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。插入排序是一种稳定排序算法。
for( int i=1; i<arr.length; i++ ){
int pos = i;
while ( pos!=0 && arr[pos]<arr[pos-1] ) {
exchange( arr, pos, pos-1 );
pos--;
}
}
}
//交换元素的位置
static void exchange(int[] arr, int pos1, int pos2)
{
int temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
}
参考:http://student.zjzk.cn/course_ware/data_structure/web/PAIXU/paixu8.1.1.1.htm