闲话不多说,直接上代码,简明易懂,条理清晰,交互性强,尽善尽美
码住,建议copy下来:
先上二分法吧,稍复杂点的,代码多一些,用了函数调用
二分排序:
#include <iostream>
using namespace std;
// 二分法查找插入位置
int binarysearch(int arr[], int low, int high, int key) {
if (high <= low)
return (key > arr[low]) ? (low + 1) : low;
int mid = (low + high) / 2;
if (key == arr[mid])
return mid + 1;
if (key > arr[mid])
return binarysearch(arr, mid + 1, high, key);
return binarysearch(arr, low, mid - 1, key);
}
// 二分法插入排序
void binary(int arr[], int n) {
int i, loc, j, selected;
for (i = 1; i < n; ++i) {
j = i - 1;
selected = arr[i];
// 查找插入位置
loc = binarysearch(arr, 0, j, selected);
// 移动元素以便插入
while (j >= loc) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = selected;
}
}
int main() {
int i, num;
cout << "输入你要排序的数字数量(100以内):\n";
cin >> num;
int a[100] = {0};
cout << "好的,现在我们将为" << num << "个数字排序,请逐个输入:\n";
for (i = 0; i < num; i++) {
cin >> a[i];
}
binary(a, num);
cout << "排序后的结果为:\n";
for (i = 0; i < num; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
选择排序:
#include<iostream>
using namespace std;
int main()
{ //首先定义数组,循环输入数字
int i,j,t,num;
int a[100]={0}; //定义变量
cout<<"输入你要为多少个数字排序(100以内):\n";
cin>>num; //个数限定
cout<<"好的,我们如今将为"<<num<<"个数字排序,请依次输入:\n";
for(i=0;i<num;i++){
cin>>a[i]; //循环输入
}
for(i=0;i<num;i++){
for(j=i+1;j<num;j++){
if(a[i]>a[j]){
t=a[i];a[i]=a[j];a[j]=t;
}
}
} //每次决出第一个数
for(i=0;i<num;i++)
cout<<a[i]<<" "; //循环输出
return 0;
}
冒泡排序:
#include<iostream>
using namespace std;
int main()
{
int i,j,t,num;
int a[100]={0}; //定义变量
cout<<"输入你要为多少个数字排序(100以内):\n";
cin>>num; //个数限定
cout<<"好的,我们如今将为"<<num<<"个数字排序,请依次输入:\n";
for(i=0;i<num;i++){
cin>>a[i]; //循环输入
}
for(j=1;j<num;j++){
for(i=0;i<num-j;i++){ //反复修正第二个条件
if(a[i]>a[i+1]){ //谨防此处越界
t=a[i];a[i]=a[i+1];a[i+1]=t;
}
}
} //冒泡实现,我是先写内循环,再外循环修整
for(i=0;i<num;i++)
cout<<a[i]<<" "; //循环输出
return 0;
}