#include <stdio.h>
#include <time.h>
#define N 100
void Swap(int *p, int *q);
int Median3(int A[], int Left, int Right);
void QuickSort(int A[],int Left, int Right);
void Println(int A[], int Len);
int main() {
int A[N] = {0};
int i, len;//
printf("请输入数组长度:\n");
scanf("%d",&len);// printf("请输入数组元素:\n");
for(i = 0; i < len; i++) { scanf("%d",&A[i]); }
QuickSort(A,0,len-1);
Println(A,len); return 0;}
void Swap(int *p, int *q) { int temp = *p; *p = *q; *q = temp; }
int Median3(int A[], int Left, int Right) {
int Center = (Left + Right)/2;
if(A[Left] > A[Center]) {
Swap(&A[Left],&A[Center]); }
if(A[Left] > A[Right]) { Swap(&A[Left],&A[Right]); }
if(A[Center] > A[Right]) { Swap(&A[Center],&A[Right]); } Swap(&A[Center],&A[Right-1]);
return A[Right-1];}
void QuickSort(int A[],int Left, int Right) { int Pivot, Low = 0, High = 0;
Pivot = Median3(A, Left, Right); Low = Left, High = Right-1;
while(1) {while(A[++Low] < Pivot); while(A[--High] > Pivot);
if(Low < High)
Swap(&A[Low],&A[High]);
else break; }
Swap(&A[Low],&A[Right-1]);
QuickSort(A, Left, Low-1);
QuickSort(A, Low+1, Right);}
void Println(int A[], int Len) {
int i = 0; for(i = 0; i < Len; i++) {
printf("%d ",A[i]);//
if(i != Len-1)// printf(" ");//注意IO流问题; }}
QuickSort 没有考虑left>=right情况
#include<stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 100
void Swap(int *p, int *q);
int Median3(int A[], int Left, int Right);
void QuickSort(int A[], int Left, int Right);
void Println(int A[], int Len);
int main()
{
int A[] = {4, 3, 2, 1, 6, 8};
int i, len; //
len = sizeof(A)/sizeof(int);
// printf("请输入数组长度:\n");
// scanf("%d", &len); // printf("请输入数组元素:\n");
// for (i = 0; i < len; i++)
// {
// scanf("%d", &A[i]);
// }
QuickSort(A, 0, len - 1);
Println(A, len);
system("pause");
}
void Swap(int *p, int *q)
{
int temp = *p;
*p = *q;
*q = temp;
}
int Median3(int A[], int Left, int Right)
{
int Center = (Left + Right) / 2;
if (A[Left] > A[Center])
{
Swap(&A[Left], &A[Center]);
}
if (A[Left] > A[Right])
{
Swap(&A[Left], &A[Right]);
}
if (A[Center] > A[Right])
{
Swap(&A[Center], &A[Right]);
}
Swap(&A[Center], &A[Right - 1]);
return A[Right - 1];
}
void QuickSort(int A[], int Left, int Right)
{
if(Left>=Right) return;
int Pivot, Low = 0, High = 0;
Pivot = Median3(A, Left, Right);
Low = Left, High = Right;
while (Low<High){
while(A[++Low] < Pivot);
while (A[--High] > Pivot);
if (Low < High)
Swap(&A[Low], &A[High]);
}
QuickSort(A, Left, High);
QuickSort(A, High+1, Right);
}
void Println(int A[], int Len)
{
int i = 0;
for (i = 0; i < Len; i++)
{
printf("%d ", A[i]);
if (i != Len - 1)
printf(" ");//注意IO流问题;
}
}
/*
6
4 3 2 1 6 8
*/
题主的实现有些麻烦了
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
//单个记录的结构体
typedef struct {
int key;
}SqNote;
//记录表的结构体
typedef struct {
SqNote r[MAX];
int length;
}SqList;
//此方法中,存储记录的数组中,下标为 0 的位置时空着的,不放任何记录,记录从下标为 1 处开始依次存放
int Partition(SqList *L,int low,int high){
L->r[0]=L->r[low];
int pivotkey=L->r[low].key;
//直到两指针相遇,程序结束
while (low<high) {
//high指针左移,直至遇到比pivotkey值小的记录,指针停止移动
while (low<high && L->r[high].key>=pivotkey) {
high--;
}
//直接将high指向的小于支点的记录移动到low指针的位置。
L->r[low]=L->r[high];
//low 指针右移,直至遇到比pivotkey值大的记录,指针停止移动
while (low<high && L->r[low].key<=pivotkey) {
low++;
}
//直接将low指向的大于支点的记录移动到high指针的位置
L->r[high]=L->r[low];
}
//将支点添加到准确的位置
L->r[low]=L->r[0];
return low;
}
void QSort(SqList *L,int low,int high){
if (low<high) {
//找到支点的位置
int pivotloc=Partition(L, low, high);
//对支点左侧的子表进行排序
QSort(L, low, pivotloc-1);
//对支点右侧的子表进行排序
QSort(L, pivotloc+1, high);
}
}
void QuickSort(SqList *L){
QSort(L, 1,L->length);
}
int main() {
SqList * L=(SqList*)malloc(sizeof(SqList));
L->length=8;
L->r[1].key=19;
L->r[2].key=28;
L->r[3].key=35;
L->r[4].key=97;
L->r[5].key=76;
L->r[6].key=13;
L->r[7].key=17;
L->r[8].key=49;
L->r[8].key=66;
QuickSort(L);
for (int i=1; i<=L->length; i++) {
printf("%d ",L->r[i].key);
}
return 0;
}