排序——快速排序算法

快速排序的思想在程序中经常用到,虽然C++给出了快速排序的函数调用,但是很多程序可能需要自己写排序过程,快速排序就会被用到,以下是快速排序算法:

快速排序时间复杂度是O(nlog(n)),在数据有序的情况下最耗时

(程序输入如果使用scanf_s则编译器为vs2013)

#include<stdio.h>

#include<stdlib.h>

#define  MAXSIZE  1<<9

typedef struct {

int key;

}RedType;

typedef  struct  {

RedType elemword[MAXSIZE];

int count;

}SqList;

void InitialSqList(SqList &);

void QuickSort(SqList &);

void QSort(SqList &, int, int);

int Partition(SqList &, int, int);

void PrintSqList(SqList);

void InitialSqList(SqList &L)

{

int i;

scanf("%d", &L.count);

for (i = 1; i <= L.count; i++)

scanf("%d", &L.elemword[i].key);

}

void PrintSqList(SqList L)

{

int i;

for (i = 1; i <= L.count; i++)

printf("%d", L.elemword[i].key);

printf("\n");

}

void QSort(SqList &L, int low, int high)

{

int pivotloc;

if (low<high)

{

pivotloc = Partition(L, low, high);

QSort(L, low, pivotloc - 1);

QSort(L, pivotloc + 1, high);

}

}

void QuickSort(SqList &L)

{

QSort(L, 1, L.count);

}

int Partition(SqList &L, int low, int high)

{

int pivotkey;

pivotkey = L.elemword[low].key;

while (low<high)

{

while (low<high&&L.elemword[high].key >= pivotkey)

--high;

L.elemword[low].key = L.elemword[high].key;

while (low<high&&L.elemword[low].key <= pivotkey)

++low;

L.elemword[high].key = L.elemword[low].key;

}

L.elemword[low].key = pivotkey;

return low;

}

int main()

{

SqList L;

int i;

while (scanf("%d",&L.count)!=EOF)

{

L.count = L.count + 1;

for (i = 1; i <= L.count; i++)

scanf("%d", &L.elemword[i].key);

QuickSort(L);

PrintSqList(L);

}

return 0;

}

时间: 2024-11-05 15:48:10

排序——快速排序算法的相关文章

排序-快速排序算法

快速排序算法是冒泡排序的一种改进,先找到一个元素,设置2各游标,i从前到后遍历,j从后向前遍历,如果第j个小于此元素,则调换,然后i++,如果遇到第i个大于此元素,则调换.其实这就是一个挖坑-填坑的过程.具体的代码如下: int base_quicksort(int A[], int first, int last){ int temp = A[0]; int i = 0; int j = sizeof(A[])/4 - 1; while(i != j){ while(A[j] > temp)

基础算法之排序--快速排序

1 /************************************************************************************** 2 * Function : 快速排序 3 * Create Date : 2014/04/21 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不

排序算法之 Java简单快速排序算法

package net.qh.test.sort; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * Created by Administrator on 2016/03/01. */ public class SimpleQuick { public int[] sort(int[] arr,int left,int right){ if ( arr == null || a

排序算法--快速排序算法解析

一.快速排序算法思路 ①.取待排序列表的第一个元素p,通过归位算法,挪移他到列表中正确的位置. ②.列表被元素p分成两部分,左边都比元素p小,右边都比元素p大. ③.通过递归,在两部分,重复1.2步骤,直至列表有序. 归位算法动画演示: 二.快速排序算法代码示例 1 def partition(l,left,right):#归位算法 2 temp = l[left] #保存归位元素 3 while left <right: 4 while l[right]>=temp and left<

【排序】快速排序算法

特别说明: 对于算法,重在理解其思想.解决问题的方法,思路.因此,以下内容全都假定待排序序列的存储结构为:顺序存储结构. 快速排序介绍 快速排序算法相较于插入.冒泡.选择排序来说而言要稍微复杂些.其主要用的是分治思想,将问题划分为更小的子问题来解决.因此,快速排序的思想其实很简单.在(目前的)时间复杂度为  的排序算法中,快速排序的系数是最小的.因此,在平均情况下,快速排序算法是被认为最快的一种排序算法(要不怎么称之为快速排序呢?). 快速排序算法在大数据量情况下,实践证明在平均情况下的排序算法

排序算法系列:快速排序算法

概述 在前面说到了两个关于交换排序的算法:冒泡排序与奇偶排序. 本文就来说说交换排序的最后一拍:快速排序算法.之所以说它是快速的原因,不是因为它比其他的排序算法都要快.而是从实践中证明了快速排序在平均性能上的确是比其他算法要快一些,不然快速一说岂不是在乱说? 本文就其原理.过程及实现几个方面讲解一下快速排序算法. 版权声明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Coding-Naga 发表日期:2016年3月1日 链接:http://blog.csdn.n

内嵌汇编与C/C++实现的冒泡排序,快速排序算法排序500W个数据对比

内嵌汇编是微软为了提高程序的直接操作硬件能力,以及实现大任务程序效率的提高,而嵌入在VC中的,他不依赖于汇编器对内嵌汇编代码进行汇编,这些内嵌汇编代码由C编译器内部实现,可以使程序好像自陷到汇编状态一样.这意味着你如果在C/C++程序中使用了 inline  asm进行 汇编 那么 就注定无法跨平台的,对于没有汇编基础的同学是需要去学习下王爽的8086汇编程序设计.,因为有些时候C++程序员是不得不懂这些东西的 ,否则你永远无法知道编译器为你的函数做了什么,.你还有哪些地方需要优化, 不管处于什

数据结构之排序算法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 -

直接插入排序 快速排序算法 直接选择排序

以下三个验证性实验都做. (1)直接插入排序算法验证. (2)快速排序算法验证. (3)直接选择排序算法验证. #include<iostream> #include<cstdlib> using namespace std; class dishizhang { public: int a[10]; int b[10]; dishizhang() { int tem; for(int i = 0 ; i < 10 ; i ++) { while(1) { int flag