快速排序(升序)

1、算法

通过一趟排序将要排序的数据分割成独立的两部分,其中左边的部分的所有数据都比右边的部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

2、算法实现

    package test;  

    public class QuickSort {
        public static void main(String[] args) {
            int[] n ={1,3,6,2,9,6,8,7};
            quicksort(n,0,7);
            for (int i : n) {
                System.out.print(i+"\t");
            }  

        }
        public static void quicksort(int[] n,int left,int right){
            int dp;
            if(left<right){
                dp = partition(n,left,right);
                quicksort(n,left,dp-1);
                quicksort(n,dp+1,right);
            }
        }
        public static int partition(int[] n,int left,int right) {
            int pivot = n[left];
            while(left<right){
                while(left<right&&n[right]>=pivot)
                    right--;
                if(left<right)
                    n[left++]=n[right];
                while(left<right&&n[left]<=pivot)
                    left++;
                if(left<right)
                    n[right--]=n[left];
            }
            n[left]=pivot;
            return left;  

        }
    }  
时间: 2024-10-25 15:45:49

快速排序(升序)的相关文章

Java中常见的排序方式-快速排序(升序)

[基本思想] 快速排序在元素较多的情况下,排序效率是相当高的.其基本思想是这样: 假设数组为int[] arr = { 49, 38, 65, 97, 76, 13, 27, 22, 26, 41, 13, 17, 32 },数组元素个数为13个. 选定a[0]为left标记,a[12]为right标记,基准点pivot的初始位置一般也为a[0](其值记为p). 定义i,j分别代表了不断变化的left和right标记. 此时,先让基准点归位.即以p为基准,左侧元素均小于p,右侧元素均大于p. 具

数据结构之排序算法Java实现(4)—— 交换类排序之快速排序算法

快速排序算法属于"交换类"的排序,它的效率主要跟数据分布是否对称有关. 升序排序: /** * 快速排序 * 升序排序 */ @Override public <T extends Comparable<? super T>> void sortByAsc(T[] data) { if(data == null || data.length <= 1){ return; } partitionSortByAsc(data, 0, data.length -

常见的算法

/* 快速排序 * 升序排列 */ - (void)quickSortArray: (NSArray *)array withLeftIndex: (NSInteger)leftIndex andRightIndex: (NSInteger)rightIndex { NSMutableArray *arr = [NSMutableArray arrayWithArray:array]; if (leftIndex >= rightIndex) { return; } NSInteger i =

1-16作业

<第 04 讲:一维数组> 1. (*)先调试,调试成功后抄写下列程序: #include <stdio.h> #define SIZE 10 int main(int argc, char *argv[]) { int a[SIZE] = {0},i= 0; for(i = 0; i < SIZE; i++){ a[i] = i+10; printf("a[%d] = %d\n", i, a[i]); } return 0; } 2. (*)将第一题中的

python八大排序算法

print("冒泡排序") def bubbleSort(input_list): ''' 函数说明:冒泡排序(升序) :param input_lis: 待排序列表 :return:sorted_list :升序排好的列表 ''' if len(input_list) == 0: return [] sorted_list = input_list for i in range(len(sorted_list)-1): bchanged =False # print("第%

排序杂谈

最近正好计导和c语言都讲到排序问题,以前都是了解概念之后直接用sort,这次把各种排序算法都代码实现一下. 题目传送门 插入排序 把序列分成两部分,前一部分为已排好序部分,后一部分未排序.(初始1~1为已排序部分,2~n为未排序部分) 然后从未排序部分中取一个数,将其加入已排序部分的对应位置中. 代码实现: 1 // 插入排序 升序 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #includ

堆排序--采用快速排序(利用大堆实现升序,小堆实现降序)

对堆进行排序,利用大堆实现升序,小堆实现降序.例如升序的实现,将较大数据存放在最后面,依次往前存放数据.具体为交换第一个元素和最后一个元素,再将不包含最后一个元素的堆进行下调,使堆保持大堆,将最大数据存放在堆中第一个位置,循环执行上述步骤,直到需要下调的数据个数为0. void AdjustDown(int *a, size_t root, size_t size)//下调--k为数组下标,size为数组元素个数 {//大堆 size_t parent = root; size_t child 

算法---快速排序(quick sort)

在前面介绍的排序算法中,最快的排序算法为归并排序,但是归并排序有一个缺陷就是排序过程中需要O(N)的额外空间.本文介绍的快速排序算法时一种原地排序算法,所需的额外空间复杂度为O(1). 算法介绍:快速排序其实一种根据需找某个元素的具体位置进行排序的方法.比如所存在如下数组 选择第一个元素5,找到5最终的位置,即5的左边的数都小于或者等于5,右边的数都大于或者等于5. 从"6"开始,可知6大于5,此处停住,从"2"开始2小于5,因此交换6与2的位置,然后接着往下走,将

三种快速排序以及快速排序的优化

一.  快速排序的基本思想 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小.之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的. 二.  快速排序的三个步骤 1) 选择基准:在待排序列中,按照某种方式挑出一个元素,作为 "基准"(pivot): 2) 分割操作:以该基准在序列中的实际位置,把序列分成两个子序列.此时,在基准左边的元素都比该基准小,在基准右边的元素都比基准大: 3) 递归地对两个序列进行快速排序,直到