1、插入排序
package sortBasic;
/**
*
* 插入排序的基本思想是:
* 每步将一个待排序的记录,
* 按其关键码值的大小插入前面已经排序的文件中适当位置上,
* 直到全部插入完为止。
* 相比于选择排序,插入排序的一个优点是提前终止,
* 不用遍历整个数组,因此,插入排序应该要比选择排序的效率更加的高效
*/
public class InsertionSort {
// 我们的算法类不允许产生任何实例
private InsertionSort(){}
public static void sort(Comparable[] arr) {
int n = arr.length;
for (int i = 0; i < n; i++) {
// // 寻找元素arr[i]合适的插入位置
// for( int j = i ; j > 0 ; j -- ){
// if( arr[j].compareTo( arr[j-1] ) < 0 )
// swap( arr, j , j-1 );
// else{
// break;
// }
//
// }
// 写法2
// for( int j = i; j > 0 && arr[j].compareTo(arr[j-1]) < 0 ; j--)
// swap(arr, j, j-1);
//写法3 改良方式
Comparable e = arr[i];
int j = i;
for ( ;j > 0 && arr[j-1].compareTo(e) > 0; j--)
arr[j] = arr[j-1];
arr[j] = e;
}
}
private static void swap(Object[] arr, int i, int j) {
Object t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
// 测试InsertionSort
public static void main(String[] args) {
Integer[] a = {10,9,8,7,6,5,4,3,2,1};
InsertionSort.sort(a);
for( int i = 0 ; i < a.length ; i ++ ){
System.out.print(a[i]);
System.out.print(' ');
}
System.out.println();
return;
}
}
2、冒泡排序
/**
*它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。
*走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
*/
public static void bubbleSort(int []arr) {
int[] arr = {12,23,34,56,56,56,78};
for(int i =0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-i-1;j++) {//-1为了防止溢出
if(arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
网友评论