排序--冒泡 选择 插入
冒泡排序
基本原理:
两个数比较大小,较大的数后移,较小的数往前移。
算法描述:
比较相邻的元素。如果第一个比第二个大,就交换它们两个;
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
针对所有的元素重复以上的步骤,除了最后一个;
重复步骤1~3,直到排序完成。
public static void main(String[] args) {
int[] a = {5, 7, 3, 4, 8, 2, 6};
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - i - 1; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
System.out.println("第" + i + "次循环" + Arrays.toString(a));
}
System.out.println("最终结果" + Arrays.toString(a));
}
选择排序
基本原理:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
public static void main(String[] args) {
/*
第一种算法交换次数较高
每次比较后都要进行交换一次
*/
int [] a = {7,5,3,4,8,2};
for (int i = 0; i < a.length - 1; i++) {
for (int j = i; j < a.length ; j++) {
if (a[i]>a[j]){
int temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
System.out.println("第"+(i+1)+"次排序结果"+ Arrays.toString(a));
}
System.out.println("最终结果"+Arrays.toString(a));
System.out.println("------------------------------------------------------------");
/*cong签到后
第二种将第i个设置为标记点,从前到后进行比较找到最小的
将最小数的下标赋值给标记点
每次循环只需交换一次
*/
int [] b = {7,5,3,4,8,2};
for (int i = 0; i < b.length - 1; i++) {
int minIndex=i;//标记第i位为最小值
for (int j = i; j < b.length ; j++) {
if (b[minIndex]>b[j]){
minIndex=j;
}
}
int temp=b[minIndex];
b[minIndex]=b[i];
b[i]=temp;
System.out.println("第"+(i+1)+"次排序结果"+ Arrays.toString(b));
}
System.out.println("最终结果"+Arrays.toString(b));
}
插入排序
基本思想
在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序
代码实现:
public static void main(String[] args) {
int [] a = {9,8,7,6,5,4,3,2,1,0};
for (int i = 0; i < a.length-1; i++) {
int current = a[i+1];//假定值
int p=i;//需要排序的前面有几个数字
while(p>=0&&a[p]>current){
a[p+1]=a[p];
p--;
}
a[p+1]=current;
System.out.println(Arrays.toString(a));
}
}