选择排序
排序过程:第一次从待排序的数据元素中选出最小(或最大)的一个元素,与序列中第一个元素进行交换,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
#include <iostream>
using namespace std;
void selectsort(int *list, const int n) {//const限定n,是的在函数中不能改变它的值
for (int i = 0; i < n-1; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (list[j] < list[min])
min = j;
}
swap(list[i], list[min]);
}
}
int main() {
int x[] = { 1,3,9,88,76,45,43,90,28 };
selectsort(x, 9);
for (int k = 0; k < 9; k++)
cout << x[k] << endl;
return 0;
};
折半查找/二分查找 O(log2n)
排序过程:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
#include <iostream>
using namespace std;//迭代写法
int Binarysearch(int nums[],int n, int target){
int low=0,high=n-1;
while(low<=high){
int mid=(low+high)/2;//low+(high-low)/2 防止越界的写法
if (nums[mid]==target)
return mid;
else if(nums[mid]>target)
high=mid-1;
else if(nums[mid]<target)
low=mid+1;
}
return -1;
}
int main() {
int x[]={3,5,7,9,10,12,14,15,17,19,23};
int target=14
int res=Binarysearch(x,sizeof(x)/sizeof(int),14);
cout<<res<<endl;
return 0;
};
#include <iostream>
using namespace std;//递归写法
int binarysearch(int *a,int left,int right,int target){
if(left<=right){
int mid=(left+right)/2;
if(target<a[mid]) return binarysearch(a,left,mid-1,target);
else if(target>a[mid])return binarysearch(a,mid+1,right,target);
else return mid;
}
return -1;
}
int main() {
int m[]={1,2,3,5,6,7,8,10,12,14,15,17,19,20};
int res;
int target=15;
res=binarysearch(m,0,14,target);
cout<<"寻找结果为:"<<res<<endl;
return 0;
}