64,637
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int main(void)
{
int a[]={1,3,3,5,7,4,2,6,8};
int temp[100] = {0};
int result[100];
int n = sizeof(a)/sizeof(a[0]);
int i;
for (i = 0; i < n; ++i) ++temp[a[i]];
for (i = 1; i < 100; ++i) temp[i] += temp[i-1];
for (i = 0; i < n; ++i) result[--temp[a[i]]] = i;
for (i = 0; i < n; ++i) printf("%d ", result[i]);
return 0;
}
#include <iostream>
#include <map>
#include <vector>
#include <cstdlib>
using namespace std;
struct MakePair
{
pair<int, int> operator() ( int n )
{
static int index = -1;
index++;
return pair<int, int>( n, index );
}
};
// return original order vector
vector<int> SortVector( vector<int>& vec )
{
multimap<int, int> myMap;
vector<int> vecOriginalIndex;
static int index = -1;
// insert multimap and add index tag
transform( vec.begin(), vec.end(), inserter( myMap, myMap.begin() ), MakePair() );
// sort
sort( vec.begin(), vec.end() );
multimap<int,int>::iterator map_iter;
vector<int>::iterator vec_iter = vec.begin();
for( ; vec_iter != vec.end(); ++vec_iter )
{
map_iter = myMap.find( *vec_iter );
vecOriginalIndex.push_back( map_iter->second );
myMap.erase( map_iter );
}
return vecOriginalIndex;
}
int main()
{
vector<int> vecTest;
vecTest.push_back( 2 );
vecTest.push_back( 8 );
vecTest.push_back( 4 );
cout<<"Original vector:";
copy( vecTest.begin(), vecTest.end(), ostream_iterator<int>( cout, " " ) );
cout<<endl;
vector<int> vecIndex = SortVector( vecTest );
cout<<"Sorted vector:";
copy( vecTest.begin(), vecTest.end(), ostream_iterator<int>( cout, " " ) );
cout<<endl;
cout<<"Original Index:";
copy( vecIndex.begin(), vecIndex.end(), ostream_iterator<int>( cout, " " ) );
cout<<endl;
system( "pause" );
return 0;
}
static void sort(int a[],int index[]) { //排序算法
int n = a.length;
for (int i = 0; i < n-1; i++)
for (int j = i+1; j <n ; j++)
if (a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
int _temp = index[i];
index[i] = index[j];
index[j] = _temp;
}
}
#include <iostream>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm> //19F少个头文件,呵呵!
using namespace std;
struct MakePair
{
pair<int, int> operator() ( int n )
{
static int index = -1;
index++;
return pair<int, int>( n, index );
}
};
// return original order vector
vector<int> SortVector( vector<int>& vec )
{
multimap<int, int> myMap;
vector<int> vecOriginalIndex;
static int index = -1;
// insert multimap and add index tag
transform( vec.begin(), vec.end(), inserter( myMap, myMap.begin() ), MakePair() );
// sort
sort( vec.begin(), vec.end() );
multimap<int,int>::iterator map_iter;
vector<int>::iterator vec_iter = vec.begin();
for( ; vec_iter != vec.end(); ++vec_iter )
{
map_iter = myMap.find( *vec_iter );
vecOriginalIndex.push_back( map_iter->second );
myMap.erase( map_iter );
}
return vecOriginalIndex;
}
int main()
{
vector<int> vecTest;
vecTest.push_back( 2 );
vecTest.push_back( 8 );
vecTest.push_back( 4 );
cout<<"Original vector:";
copy( vecTest.begin(), vecTest.end(), ostream_iterator<int>( cout, " " ) );
cout<<endl;
vector<int> vecIndex = SortVector( vecTest );
cout<<"Sorted vector:";
copy( vecTest.begin(), vecTest.end(), ostream_iterator<int>( cout, " " ) );
cout<<endl;
cout<<"Original Index:";
copy( vecIndex.begin(), vecIndex.end(), ostream_iterator<int>( cout, " " ) );
cout<<endl;
system( "pause" );
return 0;
}
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a[]={1,3,3,5,7,4,2,6,8};
int temp[100] = {0};
int result[100]; //下标
int n = sizeof(a)/sizeof(a[0]); //数组长
int i;
//赋值到临时数组
for (i = 0; i < n; ++i)
++temp[a[i]];
//数值重叠
for (i = 1; i < 100; ++i)
temp[i] += temp[i-1];
//上面求出了小于等于i的数的个数
//??俺不懂。。。
for (i = 0; i < n; ++i)
result[--temp[a[i]]] = i;
//--temp[a[i]]表示a[i]这个数排列后应该放的位置
//result[--temp[a[i]]] = i;
//表示应该上的位置上是原来第i个数
//输出下标
for (i = 0; i < n; ++i)
printf("%d ", result[i]);
system("PAUSE");
return EXIT_SUCCESS;
}
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a[]={1,3,3,5,7,4,2,6,8};
int temp[100] = {0};
int result[100]; //下标
int n = sizeof(a)/sizeof(a[0]); //数组长
int i;
//赋值到临时数组
for (i = 0; i < n; ++i)
++temp[a[i]];
//数值重叠
for (i = 1; i < 100; ++i)
temp[i] += temp[i-1];
//??俺不懂。。。
for (i = 0; i < n; ++i)
result[--temp[a[i]]] = i;
//输出下标
for (i = 0; i < n; ++i)
printf("%d ", result[i]);
system("PAUSE");
return EXIT_SUCCESS;
}