快速排序代码记录:Java & C++

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序代码记录:Java & C++相关的知识,希望对你有一定的参考价值。

快排思想

快速排序的基本思想是:通过一次排序将要排序的数据分成两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,直到有序。

C++

#include<iostream>
using namespace std;
 
void print(int a[], int n)
  
    for(int j= 0; j<n; j++)
	  
           cout<<a[j] <<"  ";  
          
    cout<<endl;  
  
 
void quickSort(int a[], int low ,int high)

	if(low<high)  //判断是否满足排序条件,递归的终止条件
	
		int i = low, j = high;   //把待排序数组元素的第一个和最后一个下标分别赋值给i,j,使用i,j进行排序;
		int x = a[low];    //将待排序数组的第一个元素作为哨兵,将数组划分为大于哨兵以及小于哨兵的两部分                                   
		while(i<j)  
		
		  while(i<j && a[j] >= x) j--;  //从最右侧元素开始,如果比哨兵大,那么它的位置就正确,然后判断前一个元素,直到不满足条件
		  if(i<j) a[i++] = a[j];   //把不满足位次条件的那个元素值赋值给第一个元素,(也即是哨兵元素,此时哨兵已经保存在x中,不会丢失)并把i的加1
		  while(i<j && a[i] <= x) i++; //换成左侧下标为i的元素开始与哨兵比较大小,比其小,那么它所处的位置就正确,然后判断后一个,直到不满足条件
		  if(i<j) a[j--] = a[i];  //把不满足位次条件的那个元素值赋值给下标为j的元素,(下标为j的元素已经保存到前面,不会丢失)并把j的加1
		 
	        a[i] = x;   //完成一次排序,把哨兵赋值到下标为i的位置,即前面的都比它小,后面的都比它大
		quickSort(a, low ,i-1);  //递归进行哨兵前后两部分元素排序 , low,high的值不发生变化,i处于中间
		quickSort(a, i+1 ,high);
	

 
int main()
  
    int a[10] = 8,1,9,7,2,4,5,6,10,3;  
    cout<<"初始序列:";  
    print(a,10);  
    quickSort(a,0,9);  
    cout<<"排序结果:";  
    print(a,10);  
    system("pause"); 
 
 
 

Java

package com.leetcode.www;

import java.util.*;

class Solution 
    public int[] getLeastNumbers(int[] arr, int k) 
        quickSort(arr,0,arr.length - 1);
        return Arrays.copyOf(arr, k);
    

    public void quickSort(int[] arr,int l ,int r)
        if(l > r)
            return;
        int i = l,j = r;
        while(i < j)
            while(i < j && arr[j] >= arr[l])
                j--;
            while(i < j && arr[i] <= arr[l])
                i++;
            swap(arr,i,j);
        
        swap(arr,i,l);
        quickSort(arr,l,i - 1);
        quickSort(arr,i + 1,r);
    
    private void swap(int[] arr, int i, int j) 
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    

    public static void main(String[] args) 
        Solution solution=new Solution();
        int []a = 8,1,9,7,2,4,5,6,10,3;
        System.out.println("初始队列:");
        System.out.println(Arrays.toString(a));
        solution.getLeastNumbers(a,10);
        System.out.println("排序结果:");
        System.out.println(Arrays.toString(a));
    

以上是关于快速排序代码记录:Java & C++的主要内容,如果未能解决你的问题,请参考以下文章

impala进阶学习

算法系列01:快速排序&&归并排序

用C++交换排序

Java 快速排序算法

mysql中如何取得某一记录在某一条件排序中的位次

Unity中的快速排序算法&&二分查找