选择排序法:
概念:
选择排序是不稳定的排序方法。
首先在数组中找到最小(大)元素,存放到序列的起始位置,再从剩余的元素中找最小(大)的元素,然后将他接着存到上个已经经过排列的元素后面,循环至所有的元素都排列完毕。
优点:移动数据的次数已知(n-1次);
缺点:比较次数多。
public static void xuanze(int arr[]){
int temp = 0;
for(int i =0; i < arr.length -1; i++){
// 记录最小数的下标
int minIndex = i;
for(int j = i + 1; j< arr.length; j++){
if(arr{minIndex} > arr[j]){
// 修改最小值的下标
minIndex = j;
}
}
if(i != minIndex){
// 根据下标换位
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
冒泡排序法
概念:
冒泡排序是一种较简单的排序算法。
他是依次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”。
优点:稳定;
缺点:慢,每次只能移动相邻两个数据。
public static void maopao(int[] arr){
int temp = 0;
// 外层的循环,决定一共运行几次
for (int i = 0; i < arr.length - 1; i++){
// 内层循环,决定每次执行外层循环运行几次
for(int j = 0; j < arr.length -i -1; ++j){
// 如果后一个大于前一个
if(arr[j + 1] < arr[j]){
// 换位
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
插入排序法
插入排序是一种简单直观的排序算法。
一个无序的数组,或者一段需要排序的序列,我们通常用第一个元素作为参考值,从第二个元素开始和这个参考值进行比较,比这个参考值大的时候放在这个参考值的后面,比这个参考值小的时候在和这个参考值的前一位进行比较,当比较至适当位置进行插入。
优点:稳定,快;
缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。
/**
* 插入排序法
*
* @author xx
*/
public static void charu(int arr[]){
int i, j;
for(i = 1; i <arr.length; i++){
int temp = arr[i];
for(j = i; j > 0 && temp < arr[j -1]; j--){
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
}