选择排序
package PaiXu;
import java.util.Random;
/**
* 选择排序
*/
public class XuanZe {
public static void main(String[] args) {
int[] arr=new int[20000];
for(int i=0;i<arr.length;i++){
arr[i]=new Random().nextInt(100000);
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("============================");
long before = System.currentTimeMillis();
bianLi(sort(arr));
long after=System.currentTimeMillis();
System.out.println();
System.out.println("排序花费时间"+(after-before)+"毫秒");
}
public static int[] sort(int[] arr){
for(int i=0;i<arr.length-1;i++){
int minIndex=i;
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[minIndex]){
minIndex=j;
}
}
int flag=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=flag;
}
return arr;
}
/**
* 遍历数组
* @param arr
*/
public static void bianLi(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
冒泡排序
package PaiXu;
/**
* 冒泡排序
*/
public class MaoPao {
/**
* @param args
*/
public static void main(String[] args) {
int [] arr=sort(new int[]{2,5,41,3,7,4,6,52,34,1,564,84});
bianLi(arr);
}
public static int[] sort(int[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int flag=arr[j];
arr[j]=arr[j+1];
arr[j+1]=flag;
}
}
}
return arr;
}
/**
* 遍历数组
* @param arr
*/
public static void bianLi(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
插入排序
package PaiXu;
/**
* @author xwm
* @email 2825902051@qq.com
* @date 2021/5/18 0018
* @time 10:46
*/
import java.util.Random;
/**
* 插入排序
* 2,3,5,1,7,4,9,6
*/
public class ChaRu {
public static void main(String[] args) {
int[] arr=new int[10000];
Random random=new Random();
for(int i=0;i<arr.length;i++){
arr[i]=random.nextInt(100000);
System.out.print(arr[i]+" ");
}
System.out.println("\n排序后:");
long before = System.currentTimeMillis();
bianLi(sort(arr));
System.out.println("\n排序花费时长"+(System.currentTimeMillis()-before));
}
public static int[] sort(int[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j>0;j--){
if(arr[j]<arr[j-1]){
int flag=arr[j];
arr[j]=arr[j-1];
arr[j-1]=flag;
}
}
}
return arr;
}
/**
* 遍历arr数组
* @param arr
*/
public static void bianLi(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
快速排序
package PaiXu;
/**
* @author xwm
* @email 2825902051@qq.com
* @date 2021/5/18 0018
* @time 17:16
*/
/**
* 快速排序
*/
public class KuaiSu {
public static void main(String[] args) {
int[] arr=new int[1000];
for(int i=0;i<1000;i++){
arr[i]=(int)(Math.random()*100000);
}
sort(arr);
bianLi(arr);
}
public static void sort(int [] arr){
int header=0;
int rear=arr.length-1;
sort(arr,header,rear);
}
public static void sort(int[] arr, int header, int rear) {
if(header>=rear){
return;
}
int divi=divide(arr,header,rear);
sort(arr,header,divi-1);
sort(arr,divi+1,rear);
}
public static int divide(int[] arr, int header, int rear) {
int divid=arr[header];
int min=header;
int max=rear+1;
while (true){
while (arr[--max]>divid){
if(max==header){
break;
}
}
while (arr[++min]<divid){
if(min==rear){
break;
}
}
if(min>=max){
break;
}
else {
int flag=arr[max];
arr[max]=arr[min];
arr[min]=flag;
}
}
int flag=arr[max];
arr[max]=arr[header];
arr[header]=flag;
return max;
}
/**
* 遍历arr数组
* @param arr
*/
public static void bianLi(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
归并排序
package PaiXu;
/**
* @author xwm
* @email 2825902051@qq.com
* @date 2021/5/18 0018
* @time 17:16
*/
/**
* 归并排序
*/
public class GuiBin {
private static int[] copy;
public static void main(String[] args) {
int[] arr=new int[]{4,3,2,8,6,5,9,1,10,654,233,26,149,30,14,68,7,100};
sort(arr);
bianLi(arr);
}
public static void sort(int[] arr){
int pre=0;
int rear=arr.length-1;
copy=new int[arr.length];
sort(arr,pre,rear);
}
public static void sort(int[] arr, int pre, int rear) {
//递归中止条件
if(pre>=rear){
return;
}
int mid=pre+(rear-pre)/2;
sort(arr,pre,mid);
sort(arr,mid+1,rear);
guiBin(arr,pre,mid,rear);
}
public static void guiBin(int[] arr, int pre, int mid, int rear) {
int copyPre=pre;
int preIndex=pre;
int midIndex=mid+1;
while(preIndex<=mid && midIndex<=rear){
if(arr[preIndex]>arr[midIndex]){
copy[copyPre++]=arr[midIndex++];
}
else{
copy[copyPre++]=arr[preIndex++];
}
}
while (preIndex<=mid){
copy[copyPre++]=arr[preIndex++];
}
while (midIndex<=rear){
copy[copyPre++]=arr[midIndex++];
}
for(int i=0;i<=rear;i++){
arr[i]=copy[i];
}
}
/**
* 遍历arr数组
* @param arr
*/
public static void bianLi(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
希尔排序
package PaiXu;
/**
* @author xwm
* @email 2825902051@qq.com
* @date 2021/5/18 0018
* @time 12:25
*/
/**
* 希尔排序
*/
public class XiEr {
public static void main(String[] args) {
bianLi(sort(new int[]{2,3,5,1,7,4,9,6,211,3,4,6,2,8,12}));
}
public static int[] sort(int[] arr){
int l=1;
while(l<arr.length/2){
l=l*2+1;
}
while(l>=1){
for(int i=l;i<arr.length;i++){
int j=i;
while (j>=l){
if(arr[j-l]>arr[j]){
int flag=arr[j-l];
arr[j-l]=arr[j];
arr[j]=flag;
j=j-l;
}
else {
break;
}
}
}
l=l/2;
}
return arr;
}
/**
* 遍历arr数组
* @param arr
*/
public static void bianLi(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
堆排序
import java.util.ArrayList;
/**
* @author xwm
* @email 2825902051@qq.com
* @date 2021/6/8 0008
* @time 18:51
*/
public class ErChaDui<T extends Comparable<T>> {
private ArrayList<T> list;
public ErChaDui(int size) {
list=new ArrayList(size);
}
public ErChaDui(){
list=new ArrayList();
}
public ArrayList<T> getList(){
return list;
}
public int size(){
return list.size();
}
public void add(T t){
list.add(t);
this.up();
}
public T remove(){
if(list.size()==0){
return null;
}
swap(0,list.size()-1);
T t=list.remove(list.size()-1);
down();
return t;
}
private void swap(int aIndex,int bIndex){
T t= (T) list.get(aIndex);
list.set(aIndex,list.get(bIndex));
list.set(bIndex,t);
}
//上浮
private void up() {
if(list.size()==0){
return;
}
int index=list.size()-1;
while (index>0){
if(list.get(index).compareTo(list.get(index-1))>0){
if(list.get(index).compareTo(list.get((index-1)/2))>0){
swap(index,(index-1)/2);
index=(index-1)/2;
continue;
}
break;
}
else {
if(list.get((index-1)/2).compareTo(list.get(index-1))<0){
swap(index-1,(index-1)/2);
index=(index-1)/2;
continue;
}
break;
}
}
}
//下沉
public void down(){
int index=0;
while ((index*2+2)<=list.size()-1){
if(list.get(index*2+1).compareTo(list.get(index*2+2))>0){
if(list.get(index).compareTo(list.get(index*2+1))<0){
swap(index,index*2+1);
index=index*2+1;
continue;
}
break;
}
else {
if(list.get(index).compareTo(list.get(index*2+2))<0){
swap(index,index*2+2);
index=index*2+2;
continue;
}
break;
}
}
}
public void list(){
for (T t : list) {
System.out.print(t+" ");
}
}
public static void main(String[] args) {
ErChaDui arr=new ErChaDui();
arr.add(4);
arr.add(1);
arr.add(2);
arr.add(5);
arr.add(3);
Comparable remove = arr.remove();
while (remove!=null){
System.out.println(remove);
remove=arr.remove();
}
}
}
测试类
package PaiXu;
/**
* @author xwm
* @email 2825902051@qq.com
* @date 2021/5/18 0018
* @time 16:08
*/
public class Test {
public static void main(String[] args) {
long before=System.currentTimeMillis();
XiEr.sort(getArr());
long after=System.currentTimeMillis();
System.out.println("希尔排序花费时长:"+(after-before)+"ms");
/*long before=System.currentTimeMillis();
ChaRu.sort(getArr());
long after=System.currentTimeMillis();
System.out.println("插入排序花费时长:"+(after-before)+"ms");*/
/*long before=System.currentTimeMillis();
GuiBin.sort(getArr());
long after=System.currentTimeMillis();
System.out.println("归并排序花费时长:"+(after-before)+"ms");*/
/*long before=System.currentTimeMillis();
KuaiSu.sort(getArr());
long after=System.currentTimeMillis();
System.out.println("快速排序花费时长:"+(after-before)+"ms");*/
}
public static int[] getArr(){
int[] arr=new int[100000];
for(int i=99999;i>=0;i--){
arr[i]=99999-i;
}
return arr;
}
}