手写个快速排序
2017-11-08 21:05
260 查看
思路就是选择一个基准数字,然后把比这个数字大的放在他右边,小的放在他左边,直到区间内只剩下最后一个数为止,详细的还是去看大佬的吧,我只是写了一下。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
int a[maxn];
int n;
void quicksort(int left, int right)
{
int i, j, temp;
if(left > right) return;
temp = a[left];
i = left;
j = right;
while(i != j)
{
while(a[j] >= temp && i < j) j--;
while(a[i] <= temp && i < j) i++;
if(i < j) swap(a[i],a[j]);
}
a[left] = a[i];
a[i] = temp;
quicksort(left, i - 1);
quicksort(i + 1, right);
}
int main()
{
while(scanf("%d", &n) &&n)
{
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
quicksort(1, n);
for(int i = 1; i <= n; i++) printf("%d\n", a[i]);
printf("\n");
}
return 0;
}
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
int a[maxn];
int n;
void quicksort(int left, int right)
{
int i, j, temp;
if(left > right) return;
temp = a[left];
i = left;
j = right;
while(i != j)
{
while(a[j] >= temp && i < j) j--;
while(a[i] <= temp && i < j) i++;
if(i < j) swap(a[i],a[j]);
}
a[left] = a[i];
a[i] = temp;
quicksort(left, i - 1);
quicksort(i + 1, right);
}
int main()
{
while(scanf("%d", &n) &&n)
{
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
quicksort(1, n);
for(int i = 1; i <= n; i++) printf("%d\n", a[i]);
printf("\n");
}
return 0;
}
相关文章推荐
- 手写快速排序(QuickSort)
- 手写快速排序
- 手写快速排序
- 手写快速排序和归并排序
- 手写的qsort快速排序
- netty实战--手写rpc框架
- 第七章快速排序之“快速排序的随机化版本RANDOM-QUICKSORT”
- 【排序】快速排序及其非递归实现,归并排序详解
- java手写的动态数组JimisunArray
- 手写视图
- 从VB来看-QuickSort(VB快速排序)
- AI应用开发实战 - 手写算式计算器
- sql数据库相关:查看存储过程的内置函数和手写的查看表结构存储过程
- 校招复习之快速排序
- 自己动手手写jQuery插件总结
- 动手写的Python的HTML语法分析器(面向对象)
- 关于利用机器学习进行手写数字的的识别
- 快速排序
- 【CNTK】CNTK学习笔记之制作自己的数据集(以MNIST手写数字数据集为例)
- pivot 可以调的,不需额外空间的java quick sort(快速排序)