插入排序是数据结构的排序算法中最简单,最容易理解的排序算法!
小编第一个接触排序的算法就是插入排序啦!
现在一起来探讨下插入排序的过程吧!
还记得有一种游戏风靡万千骚年的童年,它令多少赌徒血本无归,令多少实在的人嗤之以鼻,那就是——
扑克牌是我们日常最熟悉的一种娱乐工具,还记得我们打牌的时候整理顺序的过程吗?
让小编给大家场景再现吧!
当当当当!你运气好,第一张竟然摸到了大王K,激动呀!
然后继续摸牌,第二张你摸到了 4,此时,你会用4跟K比较,看谁大(很明显,4<K),然后把4放在前面,K往后移一位。
继续摸牌,你摸到了第三张牌是3,此时,你会先将3按序跟K比较,K>3,将k后移一位,继续跟4比较,4>3然后将4后移,最后插入到4的前面。。。。
好啦,插入排序就这么搞定啦!!!
现在来分析下JAVA代码吧!
1. 先定义一个数组R[],用来存储排好的数
2.若此时你手上的牌有n张,定义一个变量i,用来遍历已经有的n张牌。
3.定义一个j变量,用来比较待插入的牌R[i],以及记录此时数组的位置(所以j=i-1)
4.当原有的数R[i](此处将R[i]暂存到temp)大于要插入的数R[j](即 R[i]>R[j]),并且此时j的位置是合法的(j>=0)
时,将比待插大的数后移一位,R[j+1]=R[j],然后 j--.继续判断条件。直到遇到的数比自己小,或者比较到末尾了,跳出循环,将待插的R[i]放在R[j+1]处。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import java.util.Scanner;
public class CrPx {
public static void zjpx(int R[],int n){
int i,j = 0,temp = 0;
for(i=1;i<n;++i)
{ temp=R[i];
j=i-1;
while(j>=0&&temp<R[j])
{
R[j+1]=R[j];
--j;
}
R[j+1]=temp;}
for(i=0;i<n;i++)
{
System.out.print(R[i]+" ");
}}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int R[]=new int[n];
for(int i=0;i<n;i++)
{R[i]=sc.nextInt();}
zjpx(R,n);}}
------------------------------------------------------------------------------------------------------------------
搞定!