查找一组数据中第n大的数的位置方法:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//打印函数
void Print(int *arr, int len)
{
int *p = arr;
int n = len;
while (n-- > 0)
printf("%d ", *p++);
printf("\n");
}

//快排(从小到大)
void QuickSort(int *arr, int start,int end)
{
int tmp = arr[start];
int left = start;
int right = end;

if (left < right)
{
while (left < right)
{
while (left < right&&tmp<arr[right])
{
right--;
}
if (left < right)
{
arr[left] = arr[right];
left++;
}
while (left<right&&tmp>arr[left])
{
left++;
}
if (left < right)
{
arr[right] = arr[left];
right--;
}
}
arr[left] = tmp;
QuickSort(arr, start, left - 1);
QuickSort(arr, left + 1, end);
}
}

//函数接口
int find_orderk(const int *narry, const int n, const int k)
{
int site=0;
int m = n;
int a = k;
int *arr = (int*)malloc(sizeof(int)*m);
const int *p = narry;
int i;
for (i = 0; i < m; i++)
{
arr[i] = *p;
p++;
}
QuickSort(arr, 0, m-1);
Print(arr, n);
p = &arr[m-1];
while (--a != 0)
p--;
return *p;
}


int main(void)
{
int arr[] = { 2, 4, 3, 4, 7, 8 ,1,7,0,2,6,9,2,8,12,13,14};
int site=0;
int n = sizeof(arr) / sizeof(int);
int num = find_orderk(arr, n, 1);
//必须是在原来的数据中查找等值的数据
while (arr[site] != num)
site++;
printf("The site of 1th big num is %d\n", site+1);
system("pause");
return 0;

posted on 2016-08-09 16:54  A-祥子  阅读(586)  评论(0编辑  收藏  举报

导航