冒泡排序
思路:二二交换,可以让最大的数沉底,在length-1次,就有序了
package day20180315;
public class Maopao {
public static void main(String[] args) {
int[] test= {-9,88,12,75,36,-621,10};
mpsort(test);
System.out.print(" sort the end of:");
display(test);
}
static void mpsort( int[] arr)
{
for(int i=0;i<arr.length-1; i++) //length-1趟排序
{
for(int j=0; j<arr.length-i-1; j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.print("第"+(i+1)+"趟排序===");
for(int k=0; k<arr.length; k++)
{
System.out.print(","+arr[k]);
}
System.out.println();
}
}
//foreach循环。
static void display(int[] arry)
{
for(int i:arry)
System.out.print(" "+i);
}
}
end
第1趟排序===,-9,12,75,36,-621,10,88
第2趟排序===,-9,12,36,-621,10,75,88
第3趟排序===,-9,12,-621,10,36,75,88
第4趟排序===,-9,-621,10,12,36,75,88
第5趟排序===,-621,-9,10,12,36,75,88
第6趟排序===,-621,-9,10,12,36,75,88
sort the end of: -621 -9 10 12 36 75 88
选择排序
思路,每次选择最小的数,分别放在0--length-1的位置上。
package day20180327;
public class InsertDem {
public static void main(String[] args) {
int[] arry= {99,66,-8,23,100,45,7,-88};
insert(arry);
forarry(arry);
}
static void insert(int[] arr)
{
for(int i=0; i<arr.length-1; i++)
{
int index=i;
//找出最小下标
for(int j=i+1; j<arr.length; j++)
{
if(arr[index]>arr[j] )
{
index=j;
}
}
//交换
if(index!=i)
{
int temp=arr[index];
arr[index]=arr[i];
arr[i]=temp;
}
System.out.print("每"+(i+1)+"次排序结果:");
forarry(arr);
System.out.println();
}
}
static void forarry(int[] arr)
{
for(int i:arr)
{
System.out.print(i+",");
}
System.out.println();
}
}
end
每1次排序结果:-88,66,-8,23,100,45,7,99,
每2次排序结果:-88,-8,66,23,100,45,7,99,
每3次排序结果:-88,-8,7,23,100,45,66,99,
每4次排序结果:-88,-8,7,23,100,45,66,99,
每5次排序结果:-88,-8,7,23,45,100,66,99,
每6次排序结果:-88,-8,7,23,45,66,100,99,
每7次排序结果:-88,-8,7,23,45,66,99,100,
-88,-8,7,23,45,66,99,100,
插入排序
从1---length-1分别取出数组中的元素,放在前面有序的数组中。
package day20180405;
/*
* 因为一个下标,以及交换问题,卡了好久。
* 我还是菜鸟一个,要多多努力了。
*
*/
public class SelectDem {
public static void main(String[] args) {
int[] arry= {66,8,-3,87,12,-56,8};
System.out.println("排序前的数组:");
display(arry);
System.out.println();
selectsort(arry);
System.out.println("排序后的数组:");
display(arry);
}
static void selectsort(int[] arr)
{
for(int i=0; i<arr.length-1; i++)
{
int flag=0;
int index=0;
int count=0;
int temp=arr[i+1];
for(int j=i;j>=0; j--)
{
if(arr[j]>temp)
{
//SB了,没有在最开始保存插入的数组的元素,移动的时候保存被覆盖了。
arr[j+1] =arr[j];
flag=1;
index=j;
count++;
}
else {
break;
}
}
if(flag!=0)
{
//这里千万不要交换,因为前面是把数组后移一位,在交换最后,最前面的元素,不是找死嘛。
// arr[i+1]=arr[index];
arr[index]=temp;
//只用插入的元素,放在合适的位置就行了。
}
display(arr);
System.out.println("---------第"+(i+1)+" count="+count);
}
}
static void display(int[] arr)
{
for(int num:arr)
System.out.print(" "+num);
}
}
结果:
排序前的数组:
66 8 -3 87 12 -56 8
8 66 -3 87 12 -56 8---------第1 count=1
-3 8 66 87 12 -56 8---------第2 count=2
-3 8 66 87 12 -56 8---------第3 count=0
-3 8 12 66 87 -56 8---------第4 count=2
-56 -3 8 12 66 87 8---------第5 count=5
-56 -3 8 8 12 66 87---------第6 count=3
排序后的数组:
-56 -3 8 8 12 66 87
三个时间复杂度为n*n的排序算法,被我写出来了,这是比较low的。
等我准备好后,来写归并排序,和快排。
热门评论
冒泡排序,要么小的浮起,要么大的沉底,二二比较, 可是已经沉底的,下次可以不用
比较了。节省比较次数。
还有选择排序,你要依次选择最小的,一 一放在前面好嘛, 不要从头再来。。