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;
}
分享到:
相关推荐
本资源“C#经典排序算法大全和二分查找算法”提供了多种经典的排序算法实现,以及C#中的二分查找算法。让我们深入探讨这些算法的原理、实现方式以及它们在实际开发中的应用。 首先,我们来看一下排序算法。排序是将...
在Java编程中,文件读取、数组操作、选择排序以及二分查找是常见的编程任务,它们涉及了IO流、数据结构和算法等多个方面。以下是这些知识点的详细解释: 1. **文件读取**:Java提供了丰富的IO流类库用于读取文件。...
快速排序和二分查找都是在数据处理中常用的高效算法,它们的运用可以显著提升程序的性能。快速排序尤其适用于大数据量的排序,而二分查找则适合在已排序的数据中查找特定元素。在这个Java程序中,这两个算法被巧妙地...
二分查找算法与冒泡排序算法是计算机科学中两种基础且重要的算法,它们在数据处理和数组操作中扮演着至关重要的角色。 首先,我们来详细探讨递归二分查找算法。二分查找,也称为折半查找,是一种在有序数组中查找...
二分查找排序算法是一种高效的排序方法,它是基于二分查找思想和插入排序的结合体。在计算机科学中,排序算法是处理数据集合的一种基础方法,它使得数据按照特定的顺序排列,例如升序或降序。二分查找排序算法特别...
在这个主题中,我们主要关注查找和排序算法,特别是二分查找(折半查找)算法。这些算法在实际编程中具有广泛应用,包括数据库索引、搜索引擎优化和各种计算问题的解决。 首先,我们来看查找算法。查找是数据结构中...
排序算法、二分查找、二叉树查找
快速排序是一种高效的排序算法,而二分查找则是一种在有序序列中寻找特定元素的有效方法。 快速排序由英国计算机科学家C.A.R. Hoare在1960年提出,它的基本思想是采用分治法。首先选择一个基准值,将数组分为两部分...
**二分查找与分治算法详解** 二分查找是一种基于分治策略的高效搜索算法,主要应用于有序数据集合。在给定的升序排列的数组a[0:n-1]中,二分查找的目标是找到特定元素x的位置,或者确认元素不在数组中。算法的基本...
- 在排序算法中,例如快速排序和归并排序,也会用到二分查找。 通过理解二分查找算法的工作原理,熟练掌握其C++实现,并结合实际应用场景,我们可以有效地提高程序的运行效率。对于学习计算机科学的学生和专业...
综上所述,掌握这些排序算法和二分查找技巧对于Java程序员来说至关重要,它们不仅能提升编程能力,也有助于解决实际问题,提高代码的运行效率。通过学习和实践,你将能够更好地应对各种编程挑战。
本文总结了常见的查找算法和排序算法,包括顺序查找、二分查找、选择排序、冒泡排序、二分排序、插入排序、希尔排序、堆排序、归并排序等。 一、查找算法 1. 顺序查找(Sequential Search) 顺序查找是一种简单...
二分查找算法是计算机科学中的一个基本算法,适用于任何已排序的列表或数组。其优势在于能够快速地定位到目标值所在的范围,从而大幅减少不必要的比较次数。此外,对于大规模数据集而言,二分查找的效率远高于线性...
二分查找算法是一种高效的数据搜索方法,主要应用于已排序的序列。它的基本思想是通过不断地将待搜索区域减半来快速定位目标值。这个过程基于分治策略,将大问题分解为更小的子问题来解决。在二分查找算法中,每次...
5. 利用二分查找法查找特定C++成绩的学生,如78和80分,输出查找到的学生信息。 6. 冒泡排序用于对学生的数据结构成绩进行排序,验证排序结果。 7. 编写主函数,整合所有功能,形成一个完整的程序。 8. 调试和运行...
通过这个动画演示,学习者不仅可以了解二分查找算法的理论,还能通过实践加深理解,体验到编程解决问题的过程,这对于提升编程思维和技能非常有益。同时,这样的教学方式也使得复杂的算法概念变得生动有趣,易于接受...
该工具包含有Java一些比较常见的排序算法和查找算法。 排序算法包括:冒泡排序、选择排序 、插入排序、希尔排序、快速排序、归并排序、基数...查找算法包括:线性查找、二分查找、插值查询、斐波那契(黄金分割法)、
不同之处在于,归并排序不使用二分查找,而是将数组分为两半,然后对每一半进行排序,再合并。归并排序在MATLAB中实现时,也需要递归地将数组划分为更小的部分,直到每个部分仅包含一个元素,然后逐步合并这些元素,...
4. **二分查找**: 实现了`bin_search`函数,用户输入待查找的学生学号,通过二分查找法定位学号位置,找到则输出相关信息,否则提示未找到。 5. **直接插入排序**: 直接插入排序是一种简单的排序算法,通过构建有序...