目录
归并排序算法
#include<iostream>
const int N = 100010;
using namespace std;
int q[N],temp[N];
void merge_sort(int *q,int l,int r){
if(l>=r) return;
int mid = (l+r)/2;
merge_sort(q,l,mid);
merge_sort(q,mid+1,r);
int k = 0,i = l,j = mid+1;
while(i<=mid&&j<=r){
if(q[i]<q[j]) temp[k++] = q[i++];
else temp[k++] = q[j++];
while(i<=mid) temp[k++] = q[i++];
while(j<=r) temp[k++] = q[j++];
}
for(int i = 0,j = l;i<=r;j++,i++) q[i] = temp[j];
}
int main(){
int n;
scanf("%d",&n);
for(int i = 0;i<n;i++){
scanf("%d",&q[i]);
}
merge_sort(q,0,n-1);
for(int i = 0;i<n;i++){
printf("%d ",q[i]);
}
}
快速排序算法
#include<iostream>
const int N = 100010;
int q[N],n;
void quick_sort(int *q,int l,int r){
if(l>=r) return;
int i = l-1,j = r+1,x = q[(l+r)/2];
while(i<j){
do i++ ;while(q[i]<x);
do j-- ;while(q[j]>x);
if(i<j){
int temp = q[i];
q[i] = q[j];
q[j] = temp;
}
}
quick_sort(q,l,j);quick_sort(q,j+1,r);
}
int main(){
scanf("%d",&n);
for(int i = 0;i<n;i++){
scanf("%d",&q[i]);
}
quick_sort(q,0,n-1);
for(int i = 0;i<n;i++){
printf("%d ",q[i]);
}
}
选择排序算法
int* sortArray(int* nums, int numsSize, int* returnSize) {
int i;
for(i = 0; i < numsSize - 1; i++) {
int temp = i;
for(int j = i + 1; j < numsSize; j++) {
if(nums[j] < nums[temp]) {
temp = j;
}
}
if(nums[temp] != nums[i]) {
int t = nums[i];
nums[i] = nums[temp];
nums[temp] = t;
}
}
*returnSize = numsSize;
return nums;
}
字符串匹配BF算法
void Index(char*str,char*instr,int strlength,int instrlength){
int i = 0,j = 0;
while(i<strlength&&j<instrlength){
if(str[i] == instr[j]){
i++;
j++;
}else{
i = i-j+1;
j = 0;
}
}
if(j=instrlength){
printf("true");
}else{
printf("false");
}
}
int main(int argc, char** argv) {
char p[] = "asdasdasd";
char q[] = "asd";
int l = strlen(p);
int r = strlen(q);
Index(p,q,l,r);
return 0;
}
利用双指针算法来隔开字符串
#include <iostream>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//双指针算法 (降低复杂度)
int main(int argc, char** argv) {
char str[1000];
gets(str);
int n = strlen(str);
for(int i = 0;i<n;i++){
int j = i;
while(j<n&&str[j]!=' ') j++;
for(int k = i;k<j;k++){
printf("%c",str[k]);
}
printf("\n");
i = j;
}
return 0;
}