数据结构排序问题-------快排

快排实现基本思想:取个关键key值对整个序列进行比较,大的放一边,小的放另一边(这就分成两个序列了)。然后继续对两个序列(分开的)进行递归比较,最后实现整个序列的排序。

最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n).

package com;

    //快速排序
public class quick {

    //主函数实现排后的输出显示
    public static void main(String[] args){
        int[]a = {21,32,1,332,42,3,12,78,96,23};
        Quick1(a,0,a.length-1);
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }

    }
    //主体。。
    public static int Quick(int[]a,int low,int high){

        int key = a[low];    //挖坑,取数

        while(low<high){
            while(low<high && key <= a[high]){
                --high;
            }
                a[low] = a[high];  //从后往前,比key小就往前移,

            while(low<high && key >= a[low]){
                ++low;
            }
            a[high] = a[low];    //从前到后,比key大就往后移
        }
        a[low] = key;       //填坑
        return low;

    }
    //递归调用,实现整体排序
    public static void Quick1(int[]a,int low,int high){

        int pivot;

        if(low<high){
            pivot = Quick(a,low,high);
            Quick1(a,low,pivot-1);
            Quick1(a,pivot+1,high);
        }
    }

}
时间: 2024-10-07 14:12:58

数据结构排序问题-------快排的相关文章

数据结构-排序-快排

快速排序 首先快速排序步骤: 首先选择轴值 把待排序内容分为两部分,左边为小于或者等于轴值,右边为大于轴值 然后对左右重复上面步骤直到整个序列有序 直接上代码这里先写一次划分的代码 这里的一次划分是那第一个数字为轴值,我们也可以用最后一个或者中间的. #include<iostream> #include<vector> using namespace std; //不含暂存单元的数组v1 int temp1[]={59,20,17,36,98,14,23,83,13,28}; v

数据结构-链表快排

1 #include<cstdio> 2 #include<cstdlib> 3 #include<string> 4 5 struct Node{ 6 int num; 7 Node* next; 8 }; 9 10 void Add(Node **head, int num){ 11 Node *node = new Node; 12 node->num = num; 13 node->next = *head; 14 (*head) = node; 1

SDUT 3398 数据结构实验之排序一:一趟快排

数据结构实验之排序一:一趟快排 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 给定N个长整型范围内的整数,要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果. Input 连续输入多组数据,每组输入数据第一行给出正整数N(N < = 10^5),随后给出N个长整型范围内的整数,数字间以空格分隔. Output 输出一趟快速排序后的结果,数字间以一个空格间隔,行末不得有多余空格.

SDUT-3398_数据结构实验之排序一:一趟快排

数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定N个长整型范围内的整数,要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果. Input 连续输入多组数据,每组输入数据第一行给出正整数N(N < = 10^5),随后给出N个长整型范围内的整数,数字间以空格分隔. Output 输出一趟快速排序后的结果,数字间以一个空格间隔,行末不得有多余空格. Sample Input

Coursera 数据结构 清华 邓俊辉 第十二章 漫谈快排

引言 ? ? 本文从多个方面讲解了快速排序的知识点,包括快排分而治之的思想,以及他与归并排序注重点的不同,快排的性能,包括最优最差以及平均性能,并以均匀分布为例,证明了快排的平均性能是1.39*(n+1)logn,接下来又从熵的角度说明了一下快排为什么下界只能达到nlogn,为什么堆排比快排慢,而基排又能够逃脱nlogn的界限,因为nlogn只针对基于比较的排序算法 ? ? 快排的思想 ? ? 快排采取分而治之的思想,将待排序的序列分为两个子序列S分为SL和SR两个子序列,这个思想跟归并排序有点

排序(一)归并、快排、优先队列等

排序(一) 初级排序算法 选择排序 思想:首先,找到数组中最小的那个元素.其次,将它和数组的第一个元素交换位置.再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置.如此往复,直到将整个数组排序. [图例] 图中,x轴方向为数组的索引,y轴方向为待排序元素的值. 选择排序有两个很鲜明的特点: 运行时间和输入无关.为了找出最小的元素而扫描一遍数组并不能为下一遍扫描提供什么信息.这种性质在某些情况下是缺点.(无论数组的初始状态是什么,此算法效率都一样低效) 数据移动是最少的.每次交换都

排序详解(希尔,快排,归并等)

今天集中把几种排序的方法列一下,当然最出名的希尔,快排,归并和其优化当然也是满载 说到希尔排序的话,不得不先提到的就是插入排序了,希尔排序就是对直接插入排序的一种优化,下面就是直接插入排序的思想 1 void InsertSort(int *a, size_t size) 2 { 3 assert(a); 4 for (int i = 1; i < size; ++i) 5 { 6 int index = i; 7 int tmp = a[index]; 8 int end = index -

常见经典排序算法学习总结,附算法原理及实现代码(插入、shell、冒泡、选择、归并、快排等)

博主在学习过程中深感基础的重要,经典排序算法是数据结构与算法学习过程中重要的一环,这里对笔试面试最常涉及到的7种排序算法(包括插入排序.希尔排序.选择排序.冒泡排序.快速排序.堆排序.归并排序)进行了详解.每一种算法都有基本介绍.算法原理分析.算法代码. 转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/47280135 插入排序 1)算法简介 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过

初探快排

学了数据结构,实现下快排, public void QuickSort1(float[] seq,int low,int hight){int i = low;//记录最左值索引int j = hight;//记录最右值索引float temp = seq[low];//记录比较值(此处是最左值)while (low < hight)//每轮比较{while (low < hight && temp >= seq[hight]){hight--;}seq[low] = s