冒泡排序与快速排序

版权声明:be the one ~you will be the one~~ https://blog.csdn.net/Hqxcsdn/article/details/87863033

冒泡排序与快速排序

1.快速排序 :
找到一个基准点 index 假设为 开头
设置两个指针 low,high,分别指向头和尾。
high–,往下遍历,找到一个比 index 小的数字时,停住,
然后开始 low ++ ,往上遍历,找到一个 比index大的数字,停住
如果 low 比high 小 开始交换
最后 将基准点 与 low,high相等的位置交换 ,即完成了一次排序

最后 使用递归,对左边排序 ,
此时的low不变,high变为 low-1;
同理 右边排序 ,递归,

代码如下

   public static void quickSort(int[] arr,int low,int high){
	        int i,j,temp,t;
	        
	        if(low>high){
	            return;
	        }
	        
	        i=low;
	        j=high;
	        //temp就是基准位
	        temp = arr[low];
	 
	        while (i<j) {
	            //先看右边,依次往左递减
	            while (temp<=arr[j]&&i<j) {
	                j--;
	            }
	            //再看左边,依次往右递增
	            while (temp>=arr[i]&&i<j) {
	                i++;
	            }
	            //如果满足条件则交换
	            if (i<j) {
	                t = arr[j];
	                arr[j] = arr[i];
	                arr[i] = t;
	            }
	 
	        }
		        //最后将基准为与i和j相等位置的数字交换
		         arr[low] = arr[i];
		         arr[i] = temp;
		        
		        quickSort(arr, low, j-1);
		      
		        quickSort(arr, j+1, high);
	    }

2.冒泡排序
(1)从数组中第一个数开始,依次与下一个数比较并次交换比自己小的数,直到最后一个数。如果发生交换,则继续下面的步骤,如果未发生交换,则数组有序,排序结束,此时时间复杂度为O(n);
(2)每一轮”冒泡”结束后,最大的数将出现在乱序数列的最后一位。重复步骤(1)。

代码如下

public static int[] maopao(int[] x) {
		/*
		 *  (1)从数组中第一个数开始,依次与下一个数比较并次交换比自己小的数,直到最后一个数。如果发生交换,则继续下面的步骤,如果未发生交换,则数组有序,排序结束,此时时间复杂度为O(n); 
                                   (2)每一轮”冒泡”结束后,最大的数将出现在乱序数列的最后一位。重复步骤(1)。
		 */
		
		
		int length=x.length;
		for(int i=length-1;i>=0;i--) {
			for(int j=0;j<i;j++) {
				if(x[j]>x[j+1]) {
				   int temp=x[j+1];
				   x[j+1]=x[j];
				   x[j]=temp;
				   }
			}
			
		}
		
		
		
		return x;
		
	}

猜你喜欢

转载自blog.csdn.net/Hqxcsdn/article/details/87863033
今日推荐