快速排序

以首元素为基准,先从右边向左边扫描,再从左边向右边扫描。将叫小的数移动到前面,较大的数移动到后面,则第一轮过后,

首元素将所有数据分成了左右两部分,让后对左右两部分继续进行相同的操作。

1、

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
void quicksort(int data[], int low, int high)
{
 int i, pivot, j;
 if(low < high){
  pivot = data[low];
  i = low;
  j = high;
  while(i < j){
   //cout<<"data[j]: "<<data[j]<<endl;
   while(i < j && data[j] >= pivot){
    j--;
   }
   if(i < j){
    data[i++] = data[j];
   }
   while(i < j && data[i] <= pivot){
    i++;
   }
   if(i < j){
    data[j--] = data[i];  //每次的赋值都是填充上一次的基准所在位置元素
   }
  }
  data[i] = pivot;     //将基准赋给
  quicksort(data, low, i - 1);
  quicksort(data, i + 1, high);
 }
}
int main(void)
{
 int i;
 int arr[8];
 printf("Input six number: \n");
 for(i = 0; i < 8; i++){
  scanf("%d", &arr[i]);
 }
 quicksort(arr, 0, 7);
 for(i = 0; i < 8; i++){
  printf("%d ", arr[i]);
 }    
}

2、

//注意if(low<high)这一判断语句,否则不知道终止条件
#include<iostream>
using namespace std;

int partion(int data[],int low ,int high){
  int i,j,k;
  i=low;j=high;k=data[i];
  while(i<j){
   while((i<j)&&data[j]>=k){
    j--;
   }
   data[i++]=data[j];
   while((i<j)&&data[i]<=k){
    i++;
   }
   data[j--]=data[i];
  
  }
  data[i]=k;
  return i;
}
void qsort(int data[],int low,int high){
 
   int temp;
   if(low<high){     //注意这个地方大判断语句特别重要,一定要加
   temp=partion(data,low,high);
   qsort(data,low,temp-1);
   qsort(data,temp+1,high);
   }

}
int main()
{
 int a[5];
 int i;
 for(i=0;i<5;i++){
  scanf("%d",&a[i]);
 }
 qsort(a,0,4);
 for(i=0;i<5;i++){
  printf("%d ",a[i]);
 }
 printf("\n");

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值