class TestSortNum
{
public static void main(String[] args)
{
/*
需求:通过命令行参数输入几个数字,进行排序
*/
int[] a = new int[args.length];
for(int i=0;i<a.length;i++)
{
a[i] = Integer.parseInt(args[i]);//将字符串类型转换成int类型
}
print(a);
//selectionSort(a);
selectionSortEasy(a);
print(a);
}
//打印数组
private static void print(int[] a)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.println();
}
//选择排序
private static void selectionSort(int[] a)
{
for(int i=0;i<a.length;i++)
{
for(int j =i+1;j<a.length;j++)
{
if(a[j]<a[i])
{
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
//改进版的选择排序(每次内循环,只交换一次)
private static void selectionSortEasy(int[] a)
{
int k;
int temp;
for(int i=0;i<a.length;i++)
{
k = i;
for(int j =k+1;j<a.length;j++)
{
if(a[j]<a[k])
k = j;
}
if(k != i)
{
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
}
/*
总结:
1.如何看程序(郝斌):
理清程序执行流程
弄懂每句话的含义及作用
试数
2.排序的方法有很多,例如:冒泡,选择,希尔等
要注意排序效率问题
3.如何分析别人的算法
试数,找规律
4.循环与遍历
遍历:所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。
5.循环、迭代、遍历和递归
loop、iterate、traversal和recursion这几个词是计算机技术书中经常会出现的几个词汇。众所周知,这几个词分别翻译为:循环、迭代、遍历和递归。乍一看,这几个词好像都与重复(repeat)有关,但有的又好像不完全是重复的意思。那么这几个词到底各是什么含义,有什么区别和联系呢?下面就试着解释一下。
循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while语句。
迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。
递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出著名的斐波纳契数列。
有了以上定义,这几个概念之间的区别其实就比较清楚了。至于它们之间的联系,严格来讲,它们似乎都属于算法的范畴。换句话说,它们只不过是解决问题的不同手段和方式,而本质上则都是计算机编程中达成特定目标的途径
6.for(int j =i+1;j<a.length;j++)
这里不会出异常吗?
7.程序要兼顾三性:
可读性
健壮性
友好性
8.程序不是一下子就写完的,特别是大型程序,一般写一段,执行一下,验证的同时,调试一下代码
9.程序的效率与数据结构
*/
{
public static void main(String[] args)
{
/*
需求:通过命令行参数输入几个数字,进行排序
*/
int[] a = new int[args.length];
for(int i=0;i<a.length;i++)
{
a[i] = Integer.parseInt(args[i]);//将字符串类型转换成int类型
}
print(a);
//selectionSort(a);
selectionSortEasy(a);
print(a);
}
//打印数组
private static void print(int[] a)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
System.out.println();
}
//选择排序
private static void selectionSort(int[] a)
{
for(int i=0;i<a.length;i++)
{
for(int j =i+1;j<a.length;j++)
{
if(a[j]<a[i])
{
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
//改进版的选择排序(每次内循环,只交换一次)
private static void selectionSortEasy(int[] a)
{
int k;
int temp;
for(int i=0;i<a.length;i++)
{
k = i;
for(int j =k+1;j<a.length;j++)
{
if(a[j]<a[k])
k = j;
}
if(k != i)
{
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
}
/*
总结:
1.如何看程序(郝斌):
理清程序执行流程
弄懂每句话的含义及作用
试数
2.排序的方法有很多,例如:冒泡,选择,希尔等
要注意排序效率问题
3.如何分析别人的算法
试数,找规律
4.循环与遍历
遍历:所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。
5.循环、迭代、遍历和递归
loop、iterate、traversal和recursion这几个词是计算机技术书中经常会出现的几个词汇。众所周知,这几个词分别翻译为:循环、迭代、遍历和递归。乍一看,这几个词好像都与重复(repeat)有关,但有的又好像不完全是重复的意思。那么这几个词到底各是什么含义,有什么区别和联系呢?下面就试着解释一下。
循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while语句。
迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。
递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出著名的斐波纳契数列。
有了以上定义,这几个概念之间的区别其实就比较清楚了。至于它们之间的联系,严格来讲,它们似乎都属于算法的范畴。换句话说,它们只不过是解决问题的不同手段和方式,而本质上则都是计算机编程中达成特定目标的途径
6.for(int j =i+1;j<a.length;j++)
这里不会出异常吗?
7.程序要兼顾三性:
可读性
健壮性
友好性
8.程序不是一下子就写完的,特别是大型程序,一般写一段,执行一下,验证的同时,调试一下代码
9.程序的效率与数据结构
*/