如何使用STL容器实现库排序算法
How do I implement a library sort algorithm using STL containers?
我正在尝试实现这个排序算法:http://en.wikipedia.org/wiki/Library_sort。我有一些函数grupBul寻找合适的组,grupSirala排序每组。我必须留下一些间隙,并将它们包含在一个向量中,另一个数据结构。
如何执行此操作?到目前为止,我有以下代码:
#include "librarySort.h"
#include <iostream>
#include <vector>
#include <math.h>
#include "sort.h"
using namespace std;
#define EPSILON 10 //Epsilon sabiti
#define GRUPDEFBOYUT 20 //Gruplarin baslangiç boyutu
//gruplar[grupno][degerler] grupboyutu->[0] minimumeleman->[1] maksimumeleman->[2]
vector<vector<int> > gruplar;
int grupBul(vector<int*> &dizi,int sayi){
for(int i=0;i<gruplar.size();i++){
if(*dizi[gruplar[i][1]]<sayi && *dizi[gruplar[i][2]]>sayi){
return gruplar[i][2];
}
}
for(int i=gruplar.size()-1;i>=0;i--){
if (*dizi[gruplar[i][2]]<sayi){
return gruplar[i][2];
}
}
if(*dizi[gruplar[0][1]]>=sayi){
return gruplar[0][2];
}
}
int maxBul(vector<int*> &dizi,int baslangic,int son){
int max=*dizi[baslangic];
int index=baslangic;
for(int i=baslangic+1;i<son;i++){
if(*dizi[i]>max){
max=*dizi[i];
index=i;
}
}
return index;
}
int minBul(vector<int*> &dizi,int baslangic,int son){
int min=*dizi[baslangic];
int index=baslangic;
for(int i=baslangic+1;i<son;i++){
if(*dizi[i]<min){
min=*dizi[i];
index=i;
}
}
return index;
}
void ilkGruplariOlustur(vector<int*> &dizi,int son){
int grupboyut=0;
int grupno=0;
for(int i=0;i<5;i++){
vector<int> grup;
grup.push_back(GRUPDEFBOYUT);
grup.push_back(minBul(dizi,grupboyut,GRUPDEFBOYUT+grupboyut));
grup.push_back(maxBul(dizi,grupboyut,GRUPDEFBOYUT+grupboyut));
gruplar.push_back(grup);
/*for(int j=0;j<EPSILON;j++)
dizi.push_back(NULL);*/
grupboyut+=GRUPDEFBOYUT;
grupno++;
}
}
void grupSirala(vector<int*> &dizi,int baslangic,int son){
int j = 0;
int mover;
for ( int i = baslangic + 1 ; i < son ; i++ ) {
mover = *dizi[i];
j = i-1;
while ( ( j >= 0 ) && ( *dizi[j] > mover) ){
*dizi[j+1] = *dizi[j];
j--;
}
*dizi[j+1] = mover;
}
}
void bosluklariOlustur(vector<int*> &dizi){
}
int librarySort( int *data , unsigned int size) {
int kok_n=(int)sqrt((double)size);
int boyut=size;
vector<int*> sirali_dizi;
for(int i=0;i<kok_n;i++){
sirali_dizi.push_back(new int(*(data+i)));
}
ilkGruplariOlustur(sirali_dizi,0);
for(int i=0;i<sirali_dizi.size();i++)
cout << *sirali_dizi.at(i)<< " ";
for(int a = 0;a<10;a++)
sirali_dizi.push_back(NULL);
grupSirala(sirali_dizi,0,kok_n);
for(int i=0;i<5;i++){
for(int j=0;j<3;j++)
cout << gruplar[i][j] << " ";
}
/*
cout<<endl<<"Sirali dizi"+i<<endl;
for(int t=0;t<20*(i+1)+EPSILON;t++)
cout << *sirali_dizi.at(t)<< " ";
cout<<endl;
}
cout<<endl;
cout<<endl;
cout<<endl;
grupSirala(sirali_dizi,0,sirali_dizi.size());*/
for(int i=0;i<sirali_dizi.size();i++)
cout << *sirali_dizi.at(i)<< " ";
return 0;
}
vector有一个resize方法,可以让你在插入数据之前预先设置vector的大小。然后,您将能够使用操作符[]在适当的空格处插入数据。
作为旁注,如果我正在做这个项目/作业,我个人不会使用STL。
相关文章:
- C++选择排序算法中的逻辑错误
- 排序算法c++
- 下面是排序算法O(n)吗
- 为什么我的排序算法会更改数组值
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 排序算法问题(购买商店物品)(崩溃)
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 为什么在此排序算法实现中,向量明显比数组慢?
- C++中合并排序算法的奇怪行为
- 我的排序算法程序中的堆错误
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 解释一下这个排序算法是如何工作的?
- 快速排序函数在快速排序算法中如何工作?
- 分段故障,合并排序算法
- 这种排序算法已经存在吗?
- 为什么此代码上的排序算法不调用类的交换版本?
- 为什么我的替代排序算法不起作用?
- 选择排序算法生成无序结果
- 递归合并排序算法实现
- 这种快速排序算法有什么问题?