几种常用的小算法
2010-12-07 11:12
204 查看
#include <iostream>
using namespace std;
void choice_sort(int *arr, int len);
void quicksort(int *arr, int start, int pivot);
int main()
{
int arr[10] = {10, 9, 8, 7, 6, 5, 4, 3,2, 1};
quicksort(arr, 0, 9);
for(int i=0; i<10; i++) //不对称边界
{
cout<<arr[i]<<" ";
}
cout<<endl;
return 0;
}
void bubble_sort(int *arr, int len)
{
int temp;
for(int i=0; i<len-1; i++)
{
for(int j=0; j<len-1-i; j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
//插入排序想法是:一条if语句包含两种情况.
//每次求最小值,都要和数组所有其它的值进行一下比较.只能是这样做.
void insert_sort(int *arr, int len)
{
int temp;
int max;
//控制外层大循环的次数,不是吗?
for(int i=0; i<len-1; i++)
{
max = i;
for(int j= i+1; j<len; j++)
{
if(arr[max] > arr[j])
{
max = j;
}
}
if(max != i)
{
temp = arr[i];
arr[i] = arr[max];
arr[max] = temp;
}
}
}
void choice_sort(int *arr, int len)
{
//确定大循环次数,循环n-1次
int j=0;
int temp;
for(int i=0; i<len-1; i++)
{
j=i;
temp = arr[j+1];
while(j>=0 && temp<arr[j])
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
}
int partition(int *arr, int start, int pivot)
{
int i= start;
int j = start;
int temp;
for(;j<pivot;j++)
{
if(arr[j]<arr[pivot])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
}
}
temp = arr[i];
arr[i] = arr[pivot];
arr[pivot] = temp;
return i; //..返回轴点位置
}
void quicksort(int *arr, int start, int pivot)
{
int q;
if(start<pivot)
{
q = partition(arr, start, pivot);
quicksort(arr, start, q-1);
quicksort(arr, q+1, pivot);
}
}
//二分查找
//每次将问题的规模减少一半.
int binary_search(int arr, int len, int target)
{
int top=0,bottom=len-1,mid=-1;
while(top<=bottom)
{
mid = (top+bottom)>>1;
if(mid > target)
{
bottom = mid-1;
} else if(mid < target)
{
top = mid+1;
}else
{
return mid;
}
}
return -1;
}
using namespace std;
void choice_sort(int *arr, int len);
void quicksort(int *arr, int start, int pivot);
int main()
{
int arr[10] = {10, 9, 8, 7, 6, 5, 4, 3,2, 1};
quicksort(arr, 0, 9);
for(int i=0; i<10; i++) //不对称边界
{
cout<<arr[i]<<" ";
}
cout<<endl;
return 0;
}
void bubble_sort(int *arr, int len)
{
int temp;
for(int i=0; i<len-1; i++)
{
for(int j=0; j<len-1-i; j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
//插入排序想法是:一条if语句包含两种情况.
//每次求最小值,都要和数组所有其它的值进行一下比较.只能是这样做.
void insert_sort(int *arr, int len)
{
int temp;
int max;
//控制外层大循环的次数,不是吗?
for(int i=0; i<len-1; i++)
{
max = i;
for(int j= i+1; j<len; j++)
{
if(arr[max] > arr[j])
{
max = j;
}
}
if(max != i)
{
temp = arr[i];
arr[i] = arr[max];
arr[max] = temp;
}
}
}
void choice_sort(int *arr, int len)
{
//确定大循环次数,循环n-1次
int j=0;
int temp;
for(int i=0; i<len-1; i++)
{
j=i;
temp = arr[j+1];
while(j>=0 && temp<arr[j])
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
}
int partition(int *arr, int start, int pivot)
{
int i= start;
int j = start;
int temp;
for(;j<pivot;j++)
{
if(arr[j]<arr[pivot])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
}
}
temp = arr[i];
arr[i] = arr[pivot];
arr[pivot] = temp;
return i; //..返回轴点位置
}
void quicksort(int *arr, int start, int pivot)
{
int q;
if(start<pivot)
{
q = partition(arr, start, pivot);
quicksort(arr, start, q-1);
quicksort(arr, q+1, pivot);
}
}
//二分查找
//每次将问题的规模减少一半.
int binary_search(int arr, int len, int target)
{
int top=0,bottom=len-1,mid=-1;
while(top<=bottom)
{
mid = (top+bottom)>>1;
if(mid > target)
{
bottom = mid-1;
} else if(mid < target)
{
top = mid+1;
}else
{
return mid;
}
}
return -1;
}
相关文章推荐
- 几种常用加解密算法简单介绍
- 发现一种简单高效的Hash算法,比常用的几种算法效率高出一倍以上
- [转]几种常用分页算法运行效率大比拼
- 算法系列之九:计算几何与图形学有关的几种常用算法(一)
- 计算几何与图形学有关的几种常用算法(一)
- 使用JAVA实现几种常用的排序算法,浅谈算法。
- 几种常用字符串算法
- 计算几何与图形学有关的几种常用算法
- 几种简单常用的镜头边缘检测算法(matlab实现)
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
- php几种常用算法
- 计算几何与图形学有关的几种常用算法(二)
- 几种简单常用的镜头边缘检测算法(matlab实现)
- 总结几种常用的安全算法
- 算法系列之九:计算几何与图形学有关的几种常用算法(一)
- 【算法】几种常用排序算法
- RGB转灰度图的几种常用算法
- 算法系列之九:计算几何与图形学有关的几种常用算法(二) .
- 常用几种人脸对齐算法ASM/AAM/CLM/SDM
- 算法系列之九:计算几何与图形学有关的几种常用算法(一)