#include<stdio.h>
void fun(int array[],int low,int high)
{
int i = low;
int j = high;
int temp = array[i];
while(i < j)
{
while((array[j] >= temp) && (i < j))
{
j--;
array[i] = array[j];
}
while((array[i] <= temp) && (i < j))
{
i++;
array[j]= array[i];
}
}
array[i] = temp;
if(i-1>low)
{
fun(array,low,i-1);
}
if(high>i+1)
{
fun(array,j+1,high);
}
else
{
return;
}
}
void main()
{
int array[10];
printf("输入十个数字进行查找第k个小元素:\n");
for(int i=0;i<10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&array[i]);
}
fun(array,0,9);
int k;
printf("输入要查找的第几个小元素:");
scanf("%d",&k);
printf("查找的这个元素为:%d ",array[k-1]);
printf("\n");
}
2
#include<iostream.h>
#include<malloc.h>
void interchange(int* m,int* n)
{
int temp=*m;
*m=*n;
*n=temp;
}
int partition(int array[],int p,int q)
{
int i,j;
i=p;
j=q+1;
while(1)
{
do i++;
while((array[i]<array[p])&&(i!=q));
do j--;
while((array[j]>array[p])&&(j!=p));
if(i<j)
interchange(&array[i],&array[j]);
else
break;
}
interchange(&array[p],&array[j]);
return j;
}
void main()
{
int n,i,j;
cout<<"please input the number of array:";
cin>>n;
int* a=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{
cout<<"please the "<<i+1<<"th element :";
cin>>a[i];
}
cout<<endl;
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
while(1)
{
cout<<"请输入求第几小元素:" <<endl;
cin>>i;
if(i<=n)
break;
cout<<"溢出!"<<endl;
}
j=partition(a,0,n-1);
while(1)
{
if(j==i-1)
{
cout<<"第"<<i<<"小元素是:"<<a[j]<<endl;
break;
}
else
{
if(i-1<j)
j=partition(a,0,j-1);
else
j=partition(a,j+1,n-1);
}
}
}
纯C语言:分治查找第K个最小元素源码
最新推荐文章于 2024-07-27 14:37:39 发布