實現數組獲取前K個最小數

採用快速排序算法變形實現數組前K個最小數算法的實現。
#include<stdio.h>
#include<stdlib.h>

//#define swap(a,b)  {a=a^b;b=a^b;a=a^b;}
void swap(int *a,int *b)
{
  //*a=*a^*b;
  //*b=*a^*b;
//*a=*a^*b;
   int tmp;
   tmp=*a;
   *a=*b;
   *b=tmp;
}
int partion(int a[],int p,int r)
{
   int key,i,j;
   key=a[r];
   j=p-1;
   for(i=p;i<r;i++)
   {
     if(a[i]<key)
	 {
	   j++;
	   swap(&a[i],&a[j]);
	 }
   }
   j++;
   swap(&a[j],&a[r]);
   return j;
}

void K_Front(int a[],int k,int p,int r)
{
  int mid;
  if(a==NULL)
	  return;
  mid=partion(a,p,r);
  if(mid+1==k)
	  return;
  else if(mid+1<k)
      K_Front(a,k,mid+1,r);
  else if(mid+1>k)
	  K_Front(a,k,p,mid-1);
}

void main()
{
	int a[]={3,8,7,6,4,2,1,9,5};
	K_Front(a,4,0,8);

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章