冒泡排序 冒泡排序实现记口诀:n个数字来比较外层循环n-1,内层循环n-1-i
public static void main(String[] args){
//定义数组和变量
int[] a={8,7,6,5,4};
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
static void sort (int [] a){
for(int i=0;i<a.length-1;i++){//外循环
for(int j=0;j<a.length-1-i;j++){//内循环
if(a[j]>a[j+1]){
int temp;//实现两个数的交换
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
}
第一层:
第1次比较:(8,7
,)6,5,4
第2次比较: 7,(8,6)5,4
第3次比较:7,6,(8,5),4
第4次比较:7,6,5,(8,4)
展现结果:7,6,5,4,8
第二层:
第1次比较:(7,6),5,4,8
第2次比较:6,(7,5),4,8
第3次比较:6,5,(7,4),8
展现结果:6,5,4,7,8
第三层:
第1次比较:(6,5),4,7,8
第2次比较:5,(6,4),7,8
展现结果:5,4,6,7,8
第4层:
第1次比较:(5,4),6,7,8
展现结果:4,5,6,7,8
选择排序
算法思想:从头至尾扫描序列,找出一个最小的元素和第一个元素交换,接着从剩下的元素中继续这种选择和交换,直到成为一个有序数列。
原始数列:8,7,5,6,4
1,选择数列中有无序和有序两部分,开始为无序
8,7,5,6,4
2,从无序中选择一个最小的元素和第一个元素交换,此时就产生了一个元素的有序数列,无序数列减一。
{4},{7,5,6,8}
3,从无序序列中取出最小的元素5,将5同无序序列第一个元素交换,此时产生仅两个元素的有序序列,无序序列减一。
{4,5},{7,6,8}
4,从无序序列中取出最小的元素6,将6同无序序列第一个元素交换,此时产生含三个元素的有序序列,无序序列减一。
{4,5,6},{7,8}
5,从无序序列中取出最小的元素7,将7同无序序列第一个元素交换,此时产生含四个个元素的有序序列,无序序列减一。
{4,5,6,7},{8}
6,最后一个元素肯定是最大元素,无序排序直接生产一个有序的序列。
{4,5,6,7,8}
public static void main(String [] args){
int [] a={8,7,5,6,4};
selectSort(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
static void selectSort(int[] a){
//要经过n-1次比较
for(int i=0;i<a.length-1;i++){
int min=1;
//每次比较n-i
for(int j=i+1;j<a.length;i++){
if(a[min]>a[j]){
//记录目前能找到的最小元素的下标
min=j;
}
}
if(min!=i){
int temp;//将找到的最小元素和i位置的的元素进行交换
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
}
}
**插入排序**
初始状态
:
a[0] a[1] a[2] a[3] a[4]
(4) 6 5 8 7
(4 6) 5 8 7
(4 5 6) 8 7
(4 5 6 7) 8
(4 5 6 7 8)
public static void main(String [] args){
int [] a={4,6,5,8,7}
insertSort(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
static void insertSort(int [] a){
for(int i=0;i<a.length-1;i++){
int current=a[i+1];
int j=i;
while(j>=0 && a[j]>current){
a[j+1]=a[j];
j–;
}
a[j+1]=current;
}
}
}