1.快排
int Huafen(int A[],int L,int R){
int mid = A[L];
while(L < R){
while(A[R] >= mid && L < R)
R--;
A[L] = A[R];
while(A[L] <= mid && L < R)
L++
A[R] = A[L];
}
A[L] = mid;
return L;
}
void QSort(int A[],int L,int R){
if(L >= R)
return;
int mid = Huafen(A,L,R);
QSort(A,L,mid-1);
QSort(A,mid+1,R);
}
2.两个有序数组合并为一个新的有序数组(归并)
void merge(int a[],int b[],int m,int n){//m,n为数组长度
int c[m+n];
int i = 0,j=0,k=0;
while(i<m && b<n){
if(a[i] < b[j]){
c[k++] = a[i++];
}
else{
c[k++] = b[j++];
}
}
while(i < m)
c[k++] = a[i++];
while(j < n)
c[k++] = b[j++];
return ;
}
3.数组元素原地逆置
void reverse(int a[],int n){
for(int i = 0; i < n/2; i++){
int temp = a[i];
a[i] = a[n-i-1]
a[n-i-1] = temp;
}
return ;
}
4.删除数组中所有值为x的元素
//暴力
void delete_x(int a[],int x,int n){
for(int i = 0; i < n; i++){
if(a[i] == x){
for(int j = i; j < n; j++){
a[j] = a[j+1];
}
}
}
return ;
}
//最优
void delete_x(int a[],int x,int n){
int count_x= 0;//记录元素x出现的次数
int i = 0;
while(i < n){
if(a[i] == x){
count_x++;
i++;
}
else{
a[i-count_x] = a[i]
i++;
}
}//while end
return ;
}
5.删除值在s与t之间的元素
bool func(int a[],int s,int t,int n){//n为数组长度
if(s > t)
return false;
int count = 0;//记录值在(s,t)内元素的个数
int i = 0;
while(i < n){
if(a[i]>=s && a[i]<=t){
count++;
i++;
}
else{
a[i-count] = a[i];
i++;
}
}
return true;
}
6.删除有序数组中值重复的元素,使剩下的元素值均不相同
void delete_same(int a[],int n){
for(int i = 0,j = 1; j < n; j++){
if(a[i] != a[j]){
i++;
a[i] = a[j];
}
}
return ;
}
7.将数组中两个顺序表位置互换(a1,a2,a3,b1,b2,b3)→(b1,b2,b3,a1,a2,a3)
void reverse(int a[],int l,int r){
for(int i = l; i < (r-l)/2; i++){
int temp = a[i];
a[i] = a[r-i-1]
a[r-i-1] = temp;
}
}
void swap(int c[]){
reverse(c,0,m);
reverse(c,m+1,m+n-1);
reverse(c,0,m+n-1)
}