/**
* 插入排序
*
* 从第一个元素开始,该元素可以认为已经被排序
* 取出下一个元素,在已经排序的元素序列中从后向前与取出的元素比较,
* 如果该元素(已排序)大于新取出的元素,将该元素移到下一位置
* 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
* 将新元素插入到该位置中
* 重复步骤2
*/
public static void main(String[] args)
{
int[] numbers = {10,20,15,0,6,13,2,1,-5,55};
selectSort(numbers);
}
public static void insertSort(int[] numbers)
{
int size = numbers.length;
int temp = 0 ;
int j = 0;
for(int i = 0 ; i < size ; i++)
{
//取出下一个元素
temp = numbers[i];
//在已经排序的元素序列中从后向前与取出的元素比较,
for(j = i ; j > 0 && temp < numbers[j-1] ; j --)
{
//如果该元素(已排序)大于新取出的元素,将该元素移到下一位置
numbers[j] = numbers[j-1];
}
//将新元素插入到该位置中
numbers[j] = temp;
}
}
/**
* 选择排序算法
* 在未排序序列中找到最小元素,存放到已排序序列的起始位置
* 再从剩余未排序元素中继续寻找最小元素,然后放到已排好序的序列末尾。
* 以此类推,直到所有元素均排序完毕。
*/
public static void selectSort(int[] numbers)
{
int size = numbers.length; //数组长度
int temp = 0 ; //中间变量
for(int i = 0 ; i < size ; i++)
{
int k = i; //待确定的位置
for(int j = size -1 ; j > i ; j--)//在未排序序列中从后往前找到最小元素
{
if(numbers[j] < numbers[k])
{
k = j;//取出最小的数的位置,用作下一次的比较
}
}
//交换两个数
temp = numbers[i];
numbers[i] = numbers[k];//把最小数存放到已排序序列的起始位置
numbers[k] = temp;//把原i位置的数赋给k位置
}
}
方法的注释配上debug理解会更好哦。
这里就不用图形举例子了,因为所有的看图说话不适合每个人,还是自己跑跑程序理解更好。