using namespace std;
#include "stdafx.h"
#include <iostream>
void myswap(int A[], int i, int j){
int temp;
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
//插入
void inssort(int A[], int n){
for(int i = 1; i < n; i++)
for(int j = i; j > 0; j--)
{
if(A[j] < A[j-1])
myswap(A,j,j-1);
}
}
void bubsort(int A[], int n){
for(int i = 0; i < n-1; i++)
for(int j = n-1; j > 0; j--){
if(A[j] < A[j-1])
myswap(A,j,j-1);
}
}
void selsort(int A[], int n){
for(int i=0; i<n-1; i++)
{
int lowindex = i;
for(int j = n-1; j > i; j--){
if(A[j] < A[lowindex]){
lowindex = j;
}
}
myswap(A,i,lowindex);
}
}
/////////////////
int find(char * a,char aim)
{
int end = strlen(a) - 1;
int start = 0;
while( start <= end)//是<=,可能只有一个元素
{
int middle = (start + end)/2;
if((a[middle] - aim) == 0)
{
return middle;
}
else if((a[middle] - aim) > 0)
{
end = middle - 1;//必须减1,否则可能死循环
}
else
{
start = middle + 1;//必须减1
}
}
return -1;
}
二分查找,
//////////////////////
void print(int A[],int n){
for(int i = 0 ; i < n; i++){
printf("%d\n",A[i]);
// p++;
// count++;
}
//printf("count is %d\n",count);
}
//增量为incr的插入排序
void inssort2(int A[],int n, int incr){
for(int i = incr; i < n; i += incr)
for(int j = i; j >= incr; j-= incr)
{
if(A[j] < A[j-incr])
myswap(A,j,j-incr);
}
}
//
void shellsort(int A[], int n){
for(int i = n/2; i > 2; i/=2)
for(int j = 0; j < i; j++)
inssort2(&A[j],n-j,i);
inssort2(A,n,1);
}
//
void mergesort(int A[], int temp[], int left, int right){
int mid = (left + right)/2;
if(left == right) return;
mergesort(A,temp,left,mid);
mergesort(A,temp,mid+1,right);
for(int i=left; i <= right; i++)
temp[i] = A[i];
//do the merge operation back to A
int i1 = left; int i2 = mid +1;
for(int curr=left; curr<=right; curr++){
if(i1 == mid + 1)//left sublist exhausted
A[curr] = temp[i2++];
else if(i2 > right) //right sublist exhausted
A[curr] = temp[i1++];
else if(temp[i1] < temp[i2])
A[curr] = temp[i1++];
else A[curr] = temp[i2++];
}
}
int main(int argc, char* argv[])
{
int a[5] = {3,2,1,4,5};
int b[5] = {3,2,1,4,5};
int c[5] = {3,2,1,4,5};
int temp[5];
inssort(a,5);
printf("Hello World!\n");
print(a,5);
printf("bubsort:\n");
bubsort(b,5);
print(b,5);
printf("shellsort:\n");
//shellsort(c,5);
mergesort(c,temp,0,4);
print(c,5);
//
return 0;
}
分享到:
相关推荐
排序算法、二分查找、二叉树查找
通过快速排序对java对象集进行升序排序且随之进行十分查找
递归二分查找算法;
二分查找算法是运用分治的典型例子:给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。所以容易设计出二分搜索算法:在 a[0] [1] [n-1] 中搜索 x, 找到x时返回其在数组中的位置,否则返回-...
用C#实现的经典排序算法汇总大全,以及调用方法和C#实现的二分查找算法.
该工具包含有Java一些比较常见的排序算法和查找算法。 排序算法包括:冒泡排序、选择排序 、插入排序、希尔排序、快速排序、归并排序、基数...查找算法包括:线性查找、二分查找、插值查询、斐波那契(黄金分割法)、
查找算法:二分查找、顺序查找的实现 参见博客:http://blog.csdn.net/xiaowei_cqu/article/details/7748260
二分查找(非递归) <*******\n"); printf("\t***********> 3.二分查找(递归) <*******\n"); printf("\t***********> 4,直接插入排序 <*******\n"); printf("\t***********> 5.直接选择排序 <*******\n"); ...
包括顺序查找、二分查找、选择排序、冒泡排序,二分排序,插入排序,希尔排序,堆排序,归并排序等
自己看书时写的算法:快速排序、二分查找 CPP文件
完成排序和二分查找算法,而不要用语言中的类库支持;(2)实现查找终止条件;(3)实现位置查找算法。
数据结构八大算法,详细介绍了算法的如何实现,以及编码过程,有简单到复杂,由浅入深,看看会有很大收获。
算法:还有比二分查找更快的算法,判断是否是子字符串IsSubsequence,排序算法数据结构 最快的排序算法
c语言实现查找排序算法应用,1....熟练掌握顺序表和有序表的顺序查找和二分查找方法。 3.掌握排序的不同方法,并能用高级语言实现排序算法。 4.熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法
1 掌握查找的不同方法,并能用高级... 2 熟练掌握顺序表和有序表的顺序查找和二分查找方法。 3 掌握排序的不同方法,并能用高级语言实现排序算法。 4 熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。
此资源是基本插入算法的改进版本,利用数学上的二分法能提高基本插入算法的效率,包括了实例讲解以及python代码实现(每行都有注释)
编写程序构造一个有序表La,从键盘接收一个关键字key,用二分查找法在La 中查找key,若找到则提示查找成功并输出key所在的位置,否则提示没有找到信息。 2.编写程序实现Hash表的建立、删除、插入以及查找操作。 ...
) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch (int[], int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码...
在已排序好的数组T中运用二分查找的方法查找目标数的位置。...根据实验要求和伪码信息,用二分查找的方法在输入的排序好的数组T中查找目标数的位置。若目标数在数组中输出下标位置,不在则输出零。
多种排序查找算法的java实现源码,包括选择排序,冒泡排序,改进版冒泡排序,二分查找,归并排序等等