public class Sort {
public static void main(String args[]){
int len =8;
int arr[] = new int [len];
for(int i = 0;i<arr.length;i++){
//arr[i] = new int[];
arr[i]=(int)(Math.random()*10000);
}
// Bubble b = new Bubble();
// // int arr[] = {1,-34,-3,100,3};
// System.out.println("冒泡排序前"+new Date());
// b.sort(arr);
// System.out.println("冒泡排序后"+new Date());
//
// Select s = new Select();
// System.out.println("选择排序前"+new Date());
// s.sortSelect(arr);
// System.out.println("选择排序后"+new Date());
// QuickSort qs = new QuickSort();
// System.out.println("快速排序前"+new Date());
// qs.sort(0, arr.length-1, arr);
// System.out.println("快速排序后"+new Date());
Insert in = new Insert();
System.out.println("插入排序前"+new Date());
in.sort(arr);
System.out.println("插入排序后"+new Date());
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
/**
* 插入排序的基本思想:每次将一个待排序的记录,
* 按其关键字的大小插入到前面已经排好序的子文件的适当位置,
* 直到 全部的记录插入完成为止
* @author chenweisong
*
*/
class Insert{//插入排序法
public void sort(int arr[]){
int insert;
int index;
for (int i = 1; i < arr.length; i++) {
insert = arr[i];
index = i;
while(index > 0 && arr[index-1]>arr[index]){
int temp;
temp = arr[index-1];
arr[index-1]=arr[index];
arr[index] = temp;
index--;
}
}
}
}
/**
* 快速排序(Quicksort)是对冒泡排序的一种改进。
* 由C. A. R. Hoare在1962年提出。它的基本思想是:
* 通过一趟排序将要排序的数据分割成独立的两部分,
* 其中一部分的所有数据都比另外一部分的所有数据都要小,
* 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,
* 以此达到整个数据变成有序序列。
* @author chenweisong
*
*/
class QuickSort{
public void sort(int left,int right,int arr[]){
if(left < right){
int key = arr[left];
int low = left;
int hight = right;
while(low < hight){
while(low < hight && arr[hight]>key){
hight--;
}
arr[low] = arr[hight];
while(low < hight && arr[low]<key){
low++;
}
arr[hight] = arr[low];
}
arr[low] = key;
sort(left,low-1,arr);
sort(low+1,right,arr);
}else{
return;
}
}
}
/**
* 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,
* 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
* 选择排序是不稳定的排序方法。
* @author chenweisong
*
*/
class Select{
public void sortSelect(int arr[]){//选择排序
for(int i = 0;i<arr.length-1;i++){//要排序多少趟
int min = arr[i];
//int temp = i;
for(int j = i+1;j<arr.length;j++){//每次要比较多少次。(j=i+1,是因为每比较一次,最小数就产生一个,接下来没必要参加比较)
if(min>arr[j]){
int temp;
temp = min;
min = arr[j];
arr[j]= temp;
}
}
arr[i]=min;
}
}
}
/**
* 冒泡排序算法的运作如下:(从后往前)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
* @author chenweisong
*
*/
class Bubble{
public void sort(int arr[]){//冒泡排序
int temp;
for(int i = 0;i<arr.length-1;i++){//要跑多少趟
for( int j =0;j<arr.length-1;j++){//每次要比较多少次
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
public void sortSeo(int arr[]){//冒泡排序优化算法
int temp;
for(int i = 0;i<arr.length-1;i++){//要跑多少趟
for( int j =0;j<arr.length-1-i;j++){//每次要比较多少次
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
转载于:https://my.oschina.net/u/2009964/blog/353363