#include <stdio.h>
#define MAXN 8
#define MOD 1024
void QuickSort(int *arr, int low, int high)
{
if (low >= high) return
//保存排序区间的 起始位置和终点位置
int left = low, right = high
//默认 左边第一个元素 为标志
int key = arr[low]
while (low < high)
{
while (low < high && arr[high] <= key) --high
arr[low] = arr[high]
while (low < high && arr[low] >= key) ++low
arr[high] = arr[low]
}
arr[low] = key
//每次排序后都分成两部分[left, low) (low, right]
//arr[low]的位置是一定是有序的
QuickSort(arr, left, low - 1)
QuickSort(arr, low + 1, right)
return
}
int main(void)
{
int n
scanf("%d", &n)
int arr[MAXN] = {0}
int i
for (i = 0 i < n ++i)
scanf("%d", &arr[i])
//输入是默认为生活中习惯的数组左边第一个为:编号1
int s, m
scanf("%d %d", &s, &m)
//转成计算机数组第一个为:编号0
s-- m--
//快排
QuickSort(arr, s, m)
//输出
for (i = s i <= m ++i)
{
printf("%d ", arr[i])
}
return 0
}
//测试数据
//8
//1 2 3 4 5 6 7 8
//2 6
输出 6 5 4 3 2
#include <stdio.h>int partions(int l[],int low,int high)
{
int prvotkey=l[low]
l[0]=l[low]
while (low<high)
{
while (low<high&&l[high]>=prvotkey)
--high
l[low]=l[high]
while (low<high&&l[low]<=prvotkey)
++low
l[high]=l[low]
}
l[low]=l[0]
return low
}
void qsort(int l[],int low,int high)
{
int prvotloc
if(low<high)
{
prvotloc=partions(l,low,high) //将第一次排序的结果作为枢轴
qsort(l,low,prvotloc-1)//递归调用排序 由low 到prvotloc-1
qsort(l,prvotloc+1,high)//递归调用排序 由 prvotloc+1到 high
}
}
void quicksort(int l[],int n)
{
qsort(l,1,n)//第一个作为枢轴 ,从第一个排到第n个
}
void main()
{
int a[11]={0,2,32,43,23,45,36,57,14,27,39}
for (int b=1b<11b++)
printf("%3d",a[b])
printf("\n")
quicksort(a,11)
for(int c=1c<11c++)
printf("%3d",a[c])
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)