题解 | #明明的随机数#
明明的随机数
http://www.nowcoder.com/practice/3245215fffb84b7b81285493eae92ff0
C++实现,不借助容器,先排序,后去重,排序是递归实现快速排序,去重要考虑到重复两个以上的情况。代码如下:
#include<iostream>
using namespace std;
int GetIndex(int arr[],int low,int high);
void QuickSort(int arr[],int low,int high); //快速排序
void DeleteRepeated(int arr[],int* num); //去重
int main()
{
int arr[1000]={0};
int num=0;
while(cin>>num)
{
arr[1000]={0};
for(int i=0;i<num;++i)
{
cin>>arr[i];
}
QuickSort(arr, 0, num-1);
DeleteRepeated(arr, &num);
for(int i=0;i<num;++i)
{
cout<<arr[i]<<endl;
}
}
return 0;
}
int GetIndex(int arr[],int low,int high)
{
int temp;
int pivot=low;
while(low!=high)
{
if(arr[high]>arr[pivot])
--high;
else
{
if(arr[low]<=arr[pivot])
++low;
else
{
temp=arr[low];
arr[low]=arr[high];
arr[high]=temp;
--high;
}
}
}
temp=arr[low];
arr[low]=arr[pivot];
arr[pivot]=temp;
return low;
}
void QuickSort(int arr[],int low,int high)
{
if(low>=high) return;
int index=GetIndex(arr, low, high);
QuickSort(arr, low, index-1);
QuickSort(arr, index+1,high);
}
void DeleteRepeated(int arr[],int* num)
{
for(int i=0;i<*num;++i)
{
if(arr[i]==arr[i+1])
{
for(int j=i;j<*num;++j)
{
arr[j]=arr[j+1];
}
(*num)--;
i--;
}
else continue;
}
} 
