2019-03-13

快速排序


第一种

#include <stdio.h>

int a[101], n;//定义全局变量,这两个变量需要在子函数中使用

void quicksort(int left, int right)

{

int i, j, t, temp;

if (left > right)

return;

temp = a[left]; //temp中存的就是基准数

i = left;

j = right;

while (i != j)

{

//顺序很重要,要先从右边开始找

while (a[j] >= temp && i < j)

j--;

//再找右边的

while (a[i] <= temp && i < j)

i++;

//交换两个数在数组中的位置

if (i < j)

{

t = a[i];

a[i] = a[j];

a[j] = t;

}

}

//最终将基准数归位

a[left] = a[i];

a[i] = temp;

quicksort(left, i - 1);//继续处理左边的,这里是一个递归的过程

quicksort(i + 1, right);//继续处理右边的 ,这里是一个递归的过程

}

int main()

{

int i, j, t;

//读入数据

scanf_s("%d", &n);

for (i = 1; i <= n; i++)

scanf_s("%d", &a[i]);

quicksort(1, n); //快速排序调用

//输出排序后的结果

for (i = 1; i <= n; i++)

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

getchar(); getchar();

return 0;

}

第二种

#include<iostream>

using namespace std;

void swap(int a[], int i, int j)

{

int t = a[i];

a[i] = a[j];

a[j] = t;

}

int partition(int a[], int p, int r)

{

int i = p;

int j = r + 1;

int x = a[p];

while (1) {

while (i < r && a[++i] < x);//注意i<r防止无限循环

    while (a[--j] > x);

if (i >= j) break;//

swap(a, i, j);//注意两者顺序

}

//解答

swap(a, p, j);

return j;

}

void quicksort(int a[], int p, int r)

{

if (p < r) {                                 //注意p<r为判断条件

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

quicksort(a, p, q - 1);

quicksort(a, q + 1, r);

}

}

int main()

{

int i, a[100];

cout << "请输入元素个数:";

cin >> i;

cout << "请输入元素:" << endl;

for (int k = 0; k < i; k++)

{

cin >> a[k];

}

quicksort(a, 0, i - 1);

for (int k = 0; k < i; k++)

{

cout << a[k];

}

return 0;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,062评论 0 2
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,433评论 0 2
  • 莲子草的花语是没心没肺,它的茎是中空的,我特意折了一根儿,确实是空的。 莲子草是苋科莲子草属的草本植物...
    米粒微光阅读 681评论 1 0
  • 一、收入仅够营销,定位如何调整? 14年的消费下降是我们公司战略性的调整,其中带来一些收获。我们品牌是12年八月份...
    极限飙升阅读 439评论 0 0
  • 天地阴陽,日月存共。人生一世,草木一冬。人之善恶,观看面容。善者心宽,喜乐融通。恶者心窄,奸险凶猛。细祥变化,尽显...
    仙圣腾飞阅读 404评论 1 1