快速排序:
#include <stdio.h>
#include <stdlib.h>
void Swap(int *a,int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void QuickSort(int a[],int left,int right)
{
if(left > right)return;
int i,j,tmp;
i = left;
j = right;
tmp = a[left];
while(i!=j)
{
while(a[j] >= tmp&&(j>i))j--;
while(a[i] <= tmp&&(j>i))i++;
if(i<j)Swap(&a[i],&a[j]);
}
a[left] = a[i];
a[i] = tmp;
QuickSort(a,left,i-1);
QuickSort(a,i+1,right);
}
int main()
{
int arr[10005];
int n;
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
QuickSort(arr,0,n-1);
for(int i = 0;i < n;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
二分查找:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[10005];
int n,m;
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
scanf("%d",&m);
while(m--)
{
int x;
scanf("%d",&x);
int low = 0;
int high = n-1;
int flag = 1;
while(low <= high)
{
int mid = (low + high)/2;
if(arr[mid] == x)
{
printf("Yes\n");
flag = 0;
break;
}
else if(arr[mid] > x)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
if(flag)printf("No\n");
}
return 0;
}
求集合并集:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int elem[205];
int last;
}SeqList;
void Init(SeqList *L)
{
L->last = -1;
}
void Create(SeqList *L,int n)
{
int i;
for(i = 0;i < n;i++)
{
scanf("%d",&(L->elem[i]));
}
L->last = L->last + n;
}
void Merge(SeqList *la,SeqList *lb,SeqList *lc,int n)
{
for(int i = 0;i <= la->last;i++)
{
lc->elem[i] = la->elem[i];
}
lc->last = lc->last + n;
for(int i = 0;i <= lb->last;i++)
{
int flag = 0;
for(int j = 0;j <= la->last;j++)
{
if(lb->elem[i]==la->elem[j])
{
flag = 1;
break;
}
}
if(flag == 0)
{
lc->elem[++lc->last] = lb->elem[i];
}
}
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
SeqList la,lb,lc;
Init(&la);
Init(&lb);
Init(&lc);
Create(&la,m);
Create(&lb,n);
Merge(&la,&lb,&lc,m);
for(int i = 0;i <= lc.last;i++)
{
printf("%d\n",lc.elem[i]);
}
return 0;
}
还是求并集~
#include <stdio.h>
#include <stdlib.h>
int Len_A,Len_B,i;
int A[101],B[101],C[101];
void And_A_B()
{
int i,j;
for(j=0;j<Len_A;j++)
for(i=j+1;i<Len_A;i++)
{
if(A[i]==-1) continue;
if(A[i]==A[j]) A[i]=-1; //判断A数组内部是否有重合数
}
for(j=0;j<Len_B;j++)
for(i=0;i<Len_A;i++)
{
if(B[j]==A[i]) B[j]=-1; //判断A数组与B数组是否有重合数
}
}
void Print_Result()
{
for(i=0;i<Len_A;i++)
{
if(A[i]!=-1) printf("%d\n",A[i]);
}
for(i=0;i<Len_B;i++)
{
if(B[i]!=-1) printf("%d\n",B[i]);
}
}
int main()
{
scanf("%d%d",&Len_A,&Len_B);
for(i=0;i<Len_A;i++) scanf("%d",&A[i]);
for(i=0;i<Len_B;i++) scanf("%d",&B[i]);
And_A_B();
Print_Result();
return 0;
}
冒泡排序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[10005];
int n;
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n-i-1;j++)
{
if(arr[j]>arr[j+1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
for(int i = 0;i < n;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
插入排序:
#include <stdio.h>
#include <stdlib.h>
void Insertsort(int a[], int n)
{
int i, j;
for (i = 1; i < n; i++)
if (a[i] < a[i - 1])
{
int temp = a[i];
for (j = i - 1; j >= 0 && a[j] > temp; j--)
a[j + 1] = a[j];
a[j + 1] = temp;
}
}
int main()
{
int arr[10005];
int n;
scanf("%d",&n);
for(int i = 0;i < n;i++)
{
scanf("%d",&arr[i]);
}
Insertsort(arr,n);
for(int i = 0;i < n;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
归并排序:
#include <iostream>
using namespace std;
int a[10000];
int temp[10000];
void MergeArray(int a[], int first, int mid, int last, int temp[])
{
int i = first;
int j = mid+1;
int m = mid , n = last;
int k = 0;
while(i <= m && j <= n)
{
if(a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while(i <= m)
temp[k++] = a[i++];
while(j <= n)
temp[k++] = a[j++];
for(i = 0; i < k; i++)
a[first+i] = temp[i];
}
void MergeSort(int a[], int first, int last, int temp[])
{
if(first < last)
{
int mid = (first+last)/2;
MergeSort(a, first, mid, temp);
MergeSort(a, mid+1, last, temp);
MergeArray(a, first, mid , last, temp);
}
}
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i ++)
cin >> a[i];
MergeSort(a, 0, n-1, temp);
for(int i = 0; i < n; i++)
cout << a[i] << endl;
return 0;
}