#include <iostream>
using namespace std;
void quickSort(int s[], int left, int right) //快速排序
{
if (left < right) {
int i = left, j = right, x = s[left];
while (i < j) {
while (i < j && s[j] >= x) {
j--;
}
if (i < j) {
s[i++] = s[j];
}
while (i < j && s[i] < x) {
i++;
}
if (i < j) {
s[j--] = s[i];
}
}
s[i] = x;
quickSort(s, left, i -1);
quickSort(s, i + 1, right);
}
}
int binarySearch(int arr[], int length, int flied) //二分查找
{
int low = 0, high = length, middle = 0;
while (low < high) {
middle = (low + high) / 2;
if (flied == arr[middle]) {
return middle;
} else if(flied < arr[middle]) {
high = middle;
} else if (flied > arr[middle]) {
low = middle + 1;
}
}
return -1;
}
void bubbleSort(int arr[], int length) //冒泡排序
{
int i, j;
for (i = 0; i < length - 1; i++) {
for (j = 0; j < length - 1; j++) {
if (arr[j] < arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
}
void insertSort(int a[],int len){ //插入排序
for(int i=1;i<len;i++){
int tmp=a[i];
int j=i-1;
while(j>=0 && tmp<a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=tmp;
}
}
void selectSort(int a[],int len){ //选择排序
for(int i=0;i<len-1;i++){
int minidx=i;
for(int j=i+1;j<len;j++){
if(a[j]<a[minidx]){
minidx=j;
}
}
if(a[i]>a[minidx]){
int tmp=a[i];
a[i]=a[minidx];
a[minidx]=tmp;
}
}
}
void shellsort(int a[],int len){ //希尔排序
//划分成gap个组
for(int gap=len/2;gap>0;gap/=2){
//从第gap个元素,逐个对其所在组进行插入排序操作
//而不需要for每个组进行操作
for(int i=gap;i<len;i++){
int j=i-gap;
//插入排序采用交换法即可
while(j>=0 && a[j]>a[j+gap]){
swap(a[j],a[j+gap]);
j-=gap;
}
}
}
}
int main()
{
int array[] = {21, 3, 43, 53, 323, 32, 321, 9, 0, 2, 3232, 4, 1}, k;
int len = sizeof(array) / sizeof(int);
cout<<"The orginal arrayare is:"<<endl;
for(k=0;k<len;k++) {
cout<<array[k]<<",";
}
cout<<endl;
bubbleSort(array, len);
//shellsort(array, len);
selectSort(array, len);
//insertSort(array, len);
//quickSort(array,0,len - 1);
cout<<"The sorted arrayare is:"<<endl;
for(k=0;k<len;k++) {
cout<<array[k]<<",";
}
cout<<endl;
cout<<"===============================Binary Search:"<< endl;
int arr2[] = {1, 2, 3, 4, 5, 6, 7, 77, 200, 500}, i;
int length = sizeof(arr2) / sizeof(int);
int filed = 200;
int place = binarySearch(arr2, length, filed);
cout << "arrar is : ";
for(i = 0; i < length; i++) {
cout<< arr2[i] <<",";
}
cout<<"\n";
cout << "length is : " << length <<endl;
cout << "filed is : " << filed <<endl;
cout << "place is : " << place <<endl;
system("pause"); //暂停一下 请按任意键继续...........
return 0;
}
几种面试常见的算法(C++实现)
最新推荐文章于 2025-03-15 00:00:00 发布