• 排序代码,以备用时之需


    public class Demo {
    	public static void main(String[] args) {
    		int length = 8;
    		int arr[] = new int[length];
    		for(int i=0;i<length;i++) {
    			arr[i] = (int)(Math.random()*8000);
    		}
    		for(int i=0;i<arr.length;i++) {
    			System.out.print(arr[i]+"  ");
    		}
    		long startTime = System.currentTimeMillis();
    		System.out.println("排序!");
    		//quickSort(arr, 0, arr.length-1);
    		int temp[] = new int[length];
    		mergeSort(arr, 0, length, temp);
    		System.out.println("排序!"+(System.currentTimeMillis() - startTime));
    		System.out.println();
    		for(int i=0;i<arr.length;i++) {
    			System.out.print(arr[i]+"  ");
    		}
    	}
    	/**
    	 * @param arr
    	 * 	冒泡排序思想:
    	 * 	从第一个开始比较,每次将需要选择最大(最小的)放到最后
    	 * 	下次在从前面的数据里面找出,再次进行,直到结束
    	 */
    	public static void bubbleSort1(int arr[]) {
    		int temp ;
    		boolean flag = true;
    		//比较的次数是arr.length-2次
    		for(int i=0;i<arr.length-1;i++) {
    			flag = true;
    			for(int j = 0;j<arr.length-1-i;j++) {
    				if(arr[j+1]>arr[j]) {
    					flag = false;
    					temp = arr[j];
    					arr[j] = arr[j+1];
    					arr[j+1] = temp;
    				}
    				if(flag) {
    					break;
    				}
    			}
    		}
    	}
    	
    	/**
    	 * @param arr
    	 * 	选择排序,每次选择最小(最大)放在第一个位置上,一次类推
    	 */
    	public static void bubbleSort2(int arr[]) {
    		int min = 0;
    		int temp  =0;
    		for(int i=0;i<arr.length-1;i++) {
    			min = i;
    			for(int j = i;j<arr.length;j++) {
    				if(arr[min]>arr[j]) {
    					min = j;
    				}
    			}
    			if(min != i) {
    				temp = arr[i];
    				arr[i]=arr[min];
    				arr[min]=temp;	
    			}
    		}
    	}
    	
    	/**
    	 * @param arr
    	 * 	插入排序
    	 * 	从前面开始一个一个插入,有序和无序部分,将无序的一个一个的插入到有序里面
    	 */
    	public static void bubbleSort4(int arr[]) {
    		int temp ; 
    		int index;
    		for(int j = 1;j<arr.length;j++) {
    			temp = arr[j];
    			index = j;
    			for(int z = j-1;z >= 0;z=z-1) {
    				if(temp<arr[z]) {
    					arr[z+1]=arr[z];
    					index = z;
    				}
    			}
    			arr[index] = temp;
    		}
    	}
    	
    	/**
    	 * @param arr
    	 * 	shell排序,先明白插入排序,在进行将插入排序的大小变为数组1/2的大小,进行
    	 */
    	public static void bubbleSort3(int arr[]) {
    		int temp ; 
    		int index;
    		for(int i= arr.length/2;i>0;i=i/2) {
    			for(int j = i;j<arr.length;j++) {
    				temp = arr[j];
    				index = j;
    				for(int z = j-i;z >= 0;z=z-i) {
    					if(temp<arr[z]) {
    						arr[z+i]=arr[z];
    						index = z;
    					}
    				}
    				arr[index] = temp;
    			}
    		}
    	}
    	public static void quickSort(int arr[],int left,int right) {
    		int l = left;
    		int r = right;
    		int mid = (left+right)/2;
    		int temp=0;
    		int povi = arr[mid];
    		while(l<r) {
    			while(arr[l]<povi) {
    				l+=1;
    			}
    			while(arr[r]>povi) {
    				r--;
    			}
    			if(l>=r) {
    				break;
    			}
    			temp = arr[l];
    			arr[l]=arr[r];
    			arr[r]=temp;
    			if(arr[l]==povi) {
    				r++;
    			}
    			if(arr[r]==povi) {
    				l--;
    			}
    		}
    		if(l==r) {
    			l++;
    			r--;
    		}
    		if(left<r) {
    			quickSort(arr, left, r);
    		}
    		if(right>l) {
    			quickSort(arr, l, right);
    		}
    	}
    	
    	
    	public static void mergeSort(int arr[],int left,int right,int []temp) {
    		if(left<right) {
    			int mid = (left+right)/2;
    			mergeSort(arr, left, mid, temp);
    			mergeSort(arr, mid, right, temp);
    			merge(arr, left, mid, right, temp);
    		}
    	}
    	public static void merge(int arr[],int left,int mid,int right,int temp[]) {
    		int i = left;
    		int j = mid + 1;
    		int t = 0;
    		while(i<=mid&&j<=right) {
    			if(arr[i]>arr[j]) {
    				temp[t]=arr[j];
    				t++;
    				j++;
    			}else {
    				temp[t]=arr[i];
    				t++;
    				i++;
    			}
    		}
    		while(i<=mid) {
    			temp[t] = arr[i];
    			t++;
    			i++;
    		}
    		
    		while(j<=right) {
    			temp[t] = arr[j];
    			t++;
    			j++;
    		}
    		//将其复制
    		t = 0;
    		int tempLeft = left;
    		while(tempLeft <= right) {
    			arr[tempLeft] = temp[t];
    			t++;
    			tempLeft++;
    		}
    	}
    	
    }
  • 相关阅读:
    可重入函数
    epoll源码深度剖析
    数据结构学习之基本概念
    机器学习算法原理与编程实践之朴素贝叶斯分类
    机器学习算法与编程实践之中文文本分类
    ElasticSearch常用结构化搜索
    linux几种常见的文件内容查找和替换命令
    List遍历时删除遇到的问题
    初学ElasticSeacher
    从jar中读取资源文件的问题
  • 原文地址:https://www.cnblogs.com/kw28188151/p/11668690.html
Copyright © 2020-2023  润新知