java - 使用 3 个元素的分区实现快速排序算法,

标签 java c++ algorithm sorting quicksort

如何将这个快速排序算法转换成3、5、7、9和11个元素的划分?

#include"stdafx.h"
#include<iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#define size 50
void swap(int *x,int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}

int partition(int i,int j )
{
return((i+j) /2);
}

void quicksort(int list[],int m,int n)
{
int key,i,j,k;
if( m < n)
{
k = partition(m,n);
swap(&list[m],&list[k]);
key = list[m];
i = m+1;
j = n;
while(i <= j)
{
while((i <= n) && (list[i] <= key))
i++;
while((j >= m) && (list[j] > key))
j--;
if( i < j)
swap(&list[i],&list[j]);
}

swap(&list[m],&list[j]);
quicksort(list,m,j-1);
quicksort(list,j+1,n);
}
}
void printlist(int list[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d\t",list[i]);
}

void main()
{
int n,i;
int list[size];


printf("How many numbers do you want to enter");
scanf("%d",&n);
printf("Enter the numbers you want to sort");
for(i=0;i<n;i++)
{
scanf("%d",&list[i]);
}


printf("The list before sorting is:\n");
printlist(list,n);
quicksort(list,0,n-1);
printf("The list after sorting using quicksort algorithm:\n");
printlist(list,n);
system("pause");
}

最佳答案

我认为您的 C++ 老师的措辞选择不当。 “3 个元素的划分”几乎可以肯定意味着:通过选择第一个、中间和最后一个元素的中值来选择主元 - 这是最常见的编码技术,并且在数组已经排序时具有良好的性能。

推断 5、7、9、11 的定义。

关于java - 使用 3 个元素的分区实现快速排序算法,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5596403/

相关文章:

c++ - 错误消息:未找到外围设备的引脚图:Nucleo-F429ZI上的0x8009B0B

algorithm - 实现 PriorityQueue 算法

algorithm - 点对点节点的机器学习算法

java - Axis2在tomcat上运行时不断在temp文件夹中生成文件

java - ASM 字节码 - 从标签偏移量获取行号

java - Charset.forName() 无法解析符号 "CP-437"。我如何使用这个字符集?

c++ - vector push_back 不起作用

android - Android 中的 OpenCV 4.0.1 链接失败

c - 有什么办法可以在不增加变量的情况下解决这个数学问题吗?

java - 如何将基于回调的 API 转换为基于 Observable 的 API?