最近看了下排序,就把自己的学习过程记录下来
<span style="font-size:14px;">public class Sort1 {
/*
* 插入排序,在已经排序好的序列中,插入一个元素后,仍然排列有序
* 总体思路是查找要插入数字在数组中的位置,位置之前的数据不变,位置之后的数字下标加1
*/
public static void main(String[] args) {
// 被插前的数组
int[] m = new int[] { 1, 2, 3, 4, 5, 7, 8, 9 };
// n是插入后的数组
int[] n = new int[m.length + 1];
// 要插入的数字
int a = 6;
for (int j = 0; j < m.length; j++) {
if (a > m[j]) {
n[j] = m[j];//当集合中的数小于a时,直接将集合中的m[j]赋值给n[j]
}else{
//当集合中出现m[j]大于a时,在n[j]放入a,将m[j]及其以后的数字赋值给n[j+1]
n[j] = a;
for (int l = j; l < m.length; l++) {
n[l + 1] = m[l];
}
break;
}
}
//遍历集合,查看排序情况
for (int i = 0; i < n.length; i++) {
System.out.print(n[i] + ",");
}
}
}</span>
运行结果如下:
1,2,3,4,5,6,7,8,9
改进排序:
<span style="font-size: 24px;">
</span><span style="font-size:14px;">public class Sort2 {
public static void main(String[] args) {
int temp;//定义临时变量,保存要交换的值
int [] a ={32,22,54,76,8,21,43,23,41,34,};//随便建立一个无序数组
for (int j = 1; j < a.length; j++) {
//下面这个for循环对排序没有影响,只是为了方便观察数组是如何排序,在排序前遍历下数组
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+",");
}
System.out.println();//换行
temp = a[j];
/*
* 下面for循环开始进行比较,按照从小到大排列
* 注意i一定比j小,j是外层循环,i是内层循环,a[i]在数组前面,a[j]在数组后面
* 首先是a[i]和a[j]比较,此时i=0,j=1,如果第一个大于第二个,则将第一个值,赋值给第二个
* 那第一个值怎么办呢?别急,下面有个a[k+1]=a[k];就是填补空缺的第一个值得
* 具体运行的过程是这样的:如果a[i]>a[j]时,就将a[j-1]的值移到a[j]上,把a[j-2]的值
* 移到a[j-1]上……,以此类推,把a[i]移到a[i+1]上,剩下的循环就可以break掉,因为循环内
* 已经是有序的了
*
*/
for (int i = 0; i < j; i++) {
if (a[i]>temp) {//想实现从大到小排序,这里改为a[i]<temp
for (int k = j-1; k >=i; k--) {
a[k+1]=a[k];
}
a[i]=temp;
break;//终止第二层循环
}
}
}
//遍历下最终结果
System.out.println("最终结果是:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+",");
}
}
}
</span>
运行结果:
32,22,54,76,8,21,43,23,41,34,
22,32,54,76,8,21,43,23,41,34,
22,32,54,76,8,21,43,23,41,34,
22,32,54,76,8,21,43,23,41,34,
8,22,32,54,76,21,43,23,41,34,
8,21,22,32,54,76,43,23,41,34,
8,21,22,32,43,54,76,23,41,34,
8,21,22,23,32,43,54,76,41,34,
8,21,22,23,32,41,43,54,76,34,
最终结果是:
8,21,22,23,32,34,41,43,54,76,