第一步 初始化(结构体 基本函数)
#include <iostream>
using namespace std;
#define Max 10
typedef int Elemtype;
typedef struct {
Elemtype data[Max];
int length;
}Sqlist;
void swap(Elemtype &a,Elemtype &b){
Elemtype c;
c = a;
a = b;
b = c;
}
void Random(int *a,int n,int l,int r)//生成范围在l~r的随机数
{
srand(time(0)); //设置时间种子
for(int i=0;i<n;i++){
a[i]=rand()%(r-l+1)+l;//生成区间r~l的随机数
}
}
int findMinIndex(Sqlist A,int start,int end){
int Minindex = start;
for(int j=start+1;j<end;++j){
if(A.data[j]<A.data[Minindex]){
Minindex = j;
}
}
return Minindex;
}
void selectSort(Sqlist &A){
for(int i=0;i<A.length-1;++i){
int minIndex = findMinIndex(A,i,A.length);
if(i!=minIndex){
swap(A.data[i],A.data[minIndex]);
}
}
}
第二步 编写函数
bool finds2t(Sqlist &L,Elemtype s,Elemtype t,int &start,int &end){
if(s>=t||L.length == 0){
return false;
}
int IndexS;
for(IndexS = 0;IndexS<L.length&&L.data[IndexS]<s;IndexS++);
if(IndexS>=L.length){
return false;
}
int IndexT;
for(IndexT = IndexS; IndexT<L.length&&L.data[IndexT]<=t;IndexT++);
start = IndexS;
end = IndexT - 1;
cout<<"在["<<s<<","<<t<<"]之内的数组下标为["<<start<<","<<end<<"]";
return true;
}
//删除位序在 i-j 的元素
bool deli2j(Sqlist &L,int i,int j){
if(L.length == 0){
return false;
}
i--;
j--;
int IndexI;
int IndexJ;
for(IndexI = i,IndexJ = j+1;IndexJ<L.length;IndexI++,IndexJ++){
L.data[IndexI] = L.data[IndexJ];
}
L.length = L.length-(j-i+1);
cout<<endl;
cout<<"删除了位序为"<<i+1<<"到"<<j+1<<"位置上的元素之后的数组为:";
for (int k = 0; k < L.length; ++k) {
cout<<L.data[k]<<" ";
}
}
//将上两个函数组合就达到解题目的
bool Dels2t(Sqlist &L,Elemtype s,Elemtype t){
if(s>=t||L.length == 0){
return false;
}
int start;
int end;
finds2t(L,s,t,start,end);
deli2j(L,start+1,end+1);
}
int main(){
Sqlist L;
L.length = 10;
int start;
int end;
Random(L.data,10,0,10);
selectSort(L);
cout<<"数组为:";
for (int i = 0; i < L.length; ++i) {
cout<<L.data[i]<<" ";
}
//这是分别调用两个函数
//finds2t(L,4,8,start,end);
//deli2j(L,start+1,end+1);
cout<<endl;
cout<<"直接调用一个函数来实现:"<<endl;
Dels2t(L,4,8);
}
第三步 运行调试