一、排序
1.冒泡排序
将一个无序数组变为有序数组。在扫描过程中,通过相邻元素的两两比较,(设排序完成升序),第一趟比较完,数组中最大的数会排到数组的最后。然后每次排序完,数组的后方都是有序的升序序列。一共会进行n-1趟比较(假设有n个数),每一趟里待排序的数为i,则会进行i-1次两两比较。
特点:
相邻元素两两比较,有序序列在后方。
时间复杂度:n*n
#include<iostream>
using namespace std;
int main(){
int arr[10];
//输入测试数据
for(int x = 0;x<10;x++){
cin>>arr[x];
}
cout<<"输出测试数据:"<<endl;
//输出测试数据
for(int x = 0;x<10;x++){
cout<<arr[x]<<" ";
}
int a;
cout<<endl;
//冒泡排序
//执行n-1次
for(int i = 1;i<=9;i++){
//执行(n-1)*n,到 1*n次
for(int j = 0;j<=9-i;j++){
if(arr[j]>arr[j+1]){
a = arr[j];
arr[j] = arr[j+1];
arr[j+1] = a;
}
}
}
//输出排序后的测试数据
cout<<"输出排序后的测试数据:"<<endl;
for(int x = 0;x<10;x++){
cout<<arr[x]<<" ";
}
return 0;
}
2.插入排序
分析:
设有n个待排序数,从第一位往后都是待插入的数据,那么前方被插入的数据则已经有序。那么共有n个数,待插入的数据有n-1个,数据下标从0开始时,数据下标为1的数字是第一个待插入的数据。在这个数据及以前数据比较,如果后面数据比前面数据小,则交换(相当于把这个数插入到了有序数列中)。
时间复杂度:n*n
#include<iostream>
using namespace std;
int main(){
int arr[10];
//初始化待排序数组
for(int x = 0;x<10;x++){
cin>>arr[x];
}
//暂存被插入的数
int temp;
//共有n-1个数待插入到前方有序数组中
//外层执行n-1次
for(int i = 1;i<10;i++){
//执行1次到n-1此
for(int j = i;j>0;j--){
if(arr[j]<arr[j-1]){
temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
//输出排完序的数组
for(int x = 0;x<10;x++){
cout<<arr[x]<<" ";
}
return 0;
}
二、二分查找
#include<iostream>
#include <algorithm>
using namespace std;
int main(){
int x = 0;
int arr[10] = {2,8,7,9,4,6,3,0,24,80};
cout<<"数组中原有的数据:"<<endl;
for(int i = 0;i<10;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
sort(arr,arr+10);
cout<<"输出排序后数据:"<<endl;
for(int i = 0;i<10;i++){
cout<<arr[i]<<" ";
}
int sw = 0;
cout<<endl;
while(x!=-1){
cout<<"请选择要进行的操作:\n1:查找输入的数的位置\n2:查找比输入的数大的最小数\n3:查找比输入的数小的最大数\n"<<endl;
cin>>sw;
if(sw==1){
cout<<"请输入要查找的数,输入-1停止查找:"<<endl;
cin>>x;
int low = 0,high = 10-1;
while(low<=high){
// int mid = low+((high-low)>>1);
int mid =(low+high)/2;
if(x==arr[mid]){
cout<<"该数的位置是"<<mid+1<<endl;
break;
}else if(arr[mid]<x){
low = mid +1;
}else {
high = mid-1;
}
}
}
if(sw==2){
cout<<"请输入要查找的数,输入-1停止查找:"<<endl;
cin>>x;
int low = 0,high = 10-1;
while(low<=high){
// int mid = low+((high-low)>>1);
int mid =(low+high)/2;
if(x==arr[mid]){
cout<<"该数是"<<arr[mid+1]<<endl;
break;
}else if(arr[mid]<x){
low = mid +1;
}else {
high = mid-1;
}
}
}
if(sw==3){
cout<<"请输入要查找的数,输入-1停止查找:"<<endl;
cin>>x;
int low = 0,high = 10-1;
while(low<=high){
// int mid = low+((high-low)>>1);
int mid =(low+high)/2;
if(x==arr[mid]){
cout<<"该数是"<<arr[mid-1]<<endl;
break;
}else if(arr[mid]<x){
low = mid +1;
}else {
high = mid-1;
}
}
}
}
return 0;
}
三、素数
#include<iostream>
#include<math.h>
using namespace std;
int main(){
cout<<"请输入一个数,判断这个数是不是素数:"<<endl;
int n = 0;
cin>>n;
bool j = true;
if(n==1){
cout<<"这个数不是素数!"<<endl;
}else{
for(int i = 2;i<(int)sqrt(n);i++){
if(n%i==0){
cout<<"这个数不是素数!"<<endl;
j = false;
break;
}
}
if(j) cout<<"这个数是素数!"<<endl;
}
return 0;
}