数据结构_快速排序

// 数据结构_快速排序.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

/*快速排序跟合并排序类似,也是采用分治法进行,但是它是一种就地排序,所以又略有不同
因为两个数组已经是排好序了,将他们合并不需要操作,整个数组已排序
它的时间复杂度为N*lgN*/

/*算法导论中的伪代码

QUICKSORT(A,p,r)
1 if p < r
2    then q <- PARTITION(A,p,r)
3  QUICKSORT(A,p,q-1)
4  QUICKSORT(A,q+1,r)
5  MERGE(A,p,q,r)

PARTITION(A,p,r)
1 x <- A[r]
2 i <- p - 1
3 for j <- p to r-1
4   do if A[j] <= x
5  then i <- i + 1
6   exchange A[i] <-> A[j]
7 exchange A[i+1] <-> A[r]
8 return i+1
*/

#define array_length 100

int paixu_partion(int a[],int p,int r){

 int x = 0,i = 0,j = 0;
 int temp = 0;

 i = p - 1;

 /*将最后一个元素设置为区分量的两个数组
 前面一个数助的下标用i表示,后面一个用j表示*/
 x = a[r];

 for(j = p;j < r;j++){

  /*首先将j++,
  如果小于最后的一个元素,将i++
  把i和j的元素进行互换*/
  if(a[j] <= x)
  {
   i = i + 1;
   temp = a[i];
   a[i] = a[j];
   a[j] = temp;
  }
  else{
   /*如果是大于最后的一个元素,将此元素和最后的一个元素进行交换*/
   temp = a[i+1];

   a[i+1] = a[r];

   a[r] = temp;
  }
 
 }

 return i+1;

}

int paixu_sort(int a[],int p,int r)
{
 
 if(p < r){

  int q = paixu_partion(a,p,r);

  paixu_sort(a,p,q-1);

  paixu_sort(a,q+1,r);


 }
 
  return 0;
}

int main(int argc, char* argv[])
{

 int a[array_length];

 int i = 0,j = 0;

 printf("快速排序前数据\n");

 for(i = 0; i < array_length; i++){

  a[i] = rand()*3+rand()/2 + 123;

  printf("%d ",a[i]);
 }
 printf("\n");

 paixu_sort(a,0,array_length-1);

 
 printf("快速排序后数据\n");
 
 for(i = 0; i < array_length; i++){
  
  printf("%d ",a[i]);
 }

 printf("\n");

 

 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值