1.冒泡排序:
冒泡排序是相邻的两个数进行比较,然后参与比较的两个数按照排序要求交换位置;
实现代码:
int[] maoPao = new int[10];
for(int i = 0;i<maoPao.length;i++){
maoPao[i] = random.nextInt(10000);
System.out.print(maoPao[i] + " ");//输出排序前的数组
}
System.out.println();
for(int i = 0;i<maoPao.length - 1;i++){
for(int j = 0;j<maoPao.length-1-i;j++){
if(maoPao[j] > maoPao[j+1]){//判断两个相邻元素的大小并交换位置
int temp = maoPao[j+1];
maoPao[j+1] = maoPao[j];
maoPao[j] = temp;
}
}
}
for(int i = 0;i<maoPao.length;i++){//输出排序后的结果
System.out.print(maoPao[i] + " ");
}
2.选择排序:
选择排序的原理是在数组中找到一个最小(或最大)的元素,把它放在第一个位置,然后再在剩余元素中找到最小(或最大)的元素,把它放在第二个位置,依次下去,完成排序。
与冒泡排序不同的是,选择排序只在每轮比较结束的时候执行一次交换元素位置;冒泡排序是每次比较都要判断是否要交换元素位置。选择排序中通过元素下标交换元素位置,而冒泡排序中是直接交换元素的值;
实现代码:
int[] xuanZe = new int[10];
for(int i = 0;i<xuanZe.length;i++){
xuanZe[i] = random.nextInt(10000);
System.out.print(xuanZe[i] + " ");
}
System.out.println();
for(int i = 0;i<xuanZe.length-1;i++){
int max = 0;//默认第一个值是最大值
int last = xuanZe.length-1-i;//每轮比较的最后位置
for(int j = 0;j<xuanZe.length-i;j++){
if(xuanZe[max]<xuanZe[j]){
max = j;
}
}
if(max != last){//判断最大时是否在最后位置,如果是,则不需要交换
int temp = xuanZe[last];
xuanZe[last] = xuanZe[max];
xuanZe[max] = temp;
}
}
for(int i = 0;i<xuanZe.length;i++){
System.out.print(xuanZe[i] + " ");
}
3.插入排序:
它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
实现代码:
int[] chaRu = new int[10];
for(int i = 0;i<chaRu.length;i++){
chaRu[i] = random.nextInt(10000);
System.out.print(chaRu[i] + " ");
}
System.out.println();
for(int i = 0;i<chaRu.length-1;i++){
int temp = chaRu[i+1];//把需要排序的元素提取出来
int j = 0;
for(j = i; j>=0 ; j--){
if(temp<chaRu[j]){
chaRu[j+1] = chaRu[j];//把比提取出来元素大的往后移一个位置,原位置空出
}else{
break;
}
}
chaRu[j+1] = temp;//因为在内循环执行break之前,执行了一次j--,
//所以实际上空出的位置是j+1
}
for(int i = 0;i<xuanZe.length;i++){
System.out.print(chaRu[i] + " ");
}