1. 冒泡排序算法实现(java)
首先给出一个数组{3,4,5,1,2},
第一趟:
第一次比较:3小于4,不用交换位置
第二次比较:4小于5,不用交换位置
第三次比较:5大于1,a[i]与a[i+1]交换位置
第四次比较:5大于2,a[i]与a[i+1]交换位置
第一趟比较了四次,结果为{3,4,1,2,5}
第二趟:
第一次比较:3小于4,不用交换位置
第二次比较:4大于1,a[i]与a[i+1]交换位置
第三次比较:4大于2,a[i]与a[i+1]交换位置
第二趟比较了三次,结果为{3,1,2,4,5}
第三趟:
第一次比较:3大于1,a[i]与a[i+1]交换位置
第二次比较:3大于2,a[i]与a[i+1]交换位置
第三趟比较了二次,结果为{1,2,3,4,5}
第四趟:
第一次比较:1小于2,不用交换位置
第四趟比较了一次,结果为{1,2,3,4,5}
数组长度为5,总共比较了四趟,所以可以用arr.length来控制循环的趟数,每一趟需要比较的次数均为未排好的数的个数减一(带有标记的是已经排好的数),所以可以用arr.length-j来控制每一趟比较的次数。
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {3,4,5,1,2};
paw(arr);//输出排列好后的数组
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
private static void paw(int arr[]) {
int temp;
for(int j=1;j<arr.length;j++) {//趟数
for(int i=0;i<arr.length-j;i++) {//控制每一趟的比较次数
if(arr[i]>arr[i+1]) {
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
}
2、选择排序算法实现(java)
从arr[0]开始遍历,当找到比arr[0]小的数,便把新的数值作为目标值,继续向后遍历比较,当前数组遍历完后,找到的最小值与arr[0]交换
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {3,4,5,1,2};
paw0(arr);//输出排列好后的数组
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
private static void paw0(int arr[]) {
int temp;
for(int i=0;i<arr.length-1;i++) {
int min = i;
for(int j=i+1;j<arr.length;j++) {
if(arr[min]>arr[j]) {
min=j;
}
}
if(i!=min) {
temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
}
}
3、 插入排序实现(java)
默认a[0]已经排好序用a[1]与a[0]比较,若比a[0]小,就插在a[0]的前面,若比a[0]大,就插在a[0]的后面。依次向后遍历,与前面已经排好序的数组作比较。
private static void paw1(int arr[]) {
for(int i=1;i<arr.length;i++) {//控制要比较的目标数值,默认a[0]已经排好序
int temp;
for(int j = 0;j<i-1;j++) {//目标数值与已经排好的序列进行比较
if(arr[j]>arr[i]) {
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
4、希尔排序实现(java)
public static void main(String[] args) {
// TODO Auto-generated method stub
int brr[]= {9,8,7,7,5,4,3,2,1};
shellsort(brr);
for (int i = 0; i <brr.length; i++) {
System.out.println(brr[i]);
}
}
public static void shellsort(int[] arr) {
for (int internval = arr.length/2 ; internval > 0; internval = internval/2) {
//不断的缩小增量
//增量为1的插入排序
for (int i = internval; i < arr.length; i++) {
int target =arr[i];
int j=i-internval;
while(j>-1&&target<arr[j]) {
arr[j+internval]=arr[j];
j-=internval;
}
arr[j+internval]=target;
}
}