C# 二分法查找和排序


using System;
using System.Collections.Generic;
using System.Text;

namespace AAA
{
    public class Dichotomy
    {
        public static void DichotomySort(int[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                int start = 0;

int end = i - 1;

int middle = 0;

int temp = array[i];

while (start <= end)
                {
                    middle = (start + end) / 2;

if (array[middle] > temp)//要排序元素在已经排过序的数组左边
                    {
                        end = middle - 1;
                    }
                    else
                    {
                        start = middle + 1;
                    }
                }
                for (int j = i - 1; j > end; j--)//找到了要插入的位置,然后将这个位置以后的所有元素向后移动
                {
                    array[j + 1] = array[j];
                }

array[end + 1] = temp;

}
        }

public static long DichotomySearch(long[] array, long key, long high, long low)
        {
            long middle = 0;

if (high < low)
            {
                return -1;
            }

middle = (low + high) / 2;

if (array[middle] == key)
            {
                return middle;
            }
            else if (array[middle] > key)
            {
                return DichotomySearch(array, key, middle - 1, low);
            }
            else
            {
                return DichotomySearch(array, key,high, middle + 1);
            }
        }
    }
}

时间: 2025-01-10 00:29:20

C# 二分法查找和排序的相关文章

php常见的几种排序以及二分法查找

<?php 1.插入排序 思想: 每次将一个待排序的数据元素插入到前面已经排好序的数列中,使数列依然有序,知道待排序数据元素全部插入完为止. 示例: [初始关键字] [49] 38 65 97 76 13 27 49J=2(38) [38 49] 65 97 76 13 27 49J=3(65) [38 49 65] 97 76 13 27 49J=4(97) [38 49 65 97] 76 13 27 49J=5(76) [38 49 65 76 97] 13 27 49J=6(13) [1

iOS 排序算法总结、二分法查找

还有一个:二分插入排序  平均时间O(n2)   稳定 1.插入排序 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环,直到全部排好顺序. 直接插入排序是稳定的.算法时间复杂度O(n2)--[n的平方] main() { int  a[10],j,i,m; for(j=1;j<10;j++) { m=a[j]; for(i=j-1;i>=0;i--) { if(a[i]<m) b

数组排序 和 二分法查找

二分法查找 当数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的. 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功:若 x 小于当前位置值,则在数列的前半段中查找:若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止. 假设有一个数组 {5,4,2, 67, 77, 89, 90,4,9,1,12, 23, 34, 45, 56 },现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -

JavaScript用二分法查找数据等

//二分法查数据 var arr=[41,43,45,53,44,95,23]; var b=44; var min=0; var max=arr.length; for(var i=1;i<arr.length;i++){ //外层循环控制排序的次数 for(var j=0;j<arr.length-i;j++){//内层循环控制循环的个数 if(arr[j]<arr[j+1]){ z=arr[j]; arr[j]=arr[j+1]; arr[j+1]=z; } } } // aler

在数组中使用二分法查找

package com.db2; import java.util.Arrays; /** * 二分法查找 * * @author denny 使用二分法查找的前提数组已经排过序 * */ public class Demo4 { public static void main(String[] args) { int[] arr = { 3, 1, 8, 2, 9, 100, 33, 22, 11, 18, 14, 17, 15, 3 }; // 使用Arrays.sort()排序 Array

Java二分法查找实现

public class Dichotomy {        //定义查找次数    static int count = 0;        public static void main(String[] args) {                //定义数组        int [] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};                //二分法查找        int result = searchRecursive

用二分法查找的套路(一)

需要注意的是: 1.二分法查找是在有序的基础上 2.确定判断是否找到的条件,确定判断函数 3.边界条件控制 1)闭区间[a,b] 2)半开半闭区间[a,b) 例题: 1.首个失败的产品. 这是一个闭区间的例子. 假设有一系列产品[1,2,3,4,5,6,7...],现在发现最新的产品是损坏的,你需要找出第一个失败了的产品,也就是出问题的那个产品.是否出问题通过函数isBadVersion(version)来判断. 分析: 1 int left =1; 2 int right =n;//n是数组长

STL查找、排序、替换、集合算法

1.STL查找算法 (1).代码如下: #include<iostream> #include<vector> #include<algorithm> using namespace std; //查找算法!!! void main_adjacent_find(){     vector<int> v1;      v1.push_back(1);     v1.push_back(2);     v1.push_back(2);     v1.push_b

二分法查找(数组元素无序)

问题描述: 一数组,含有一堆无序数据,首先将数据按顺序排列,再用二分法实现某个元素的查找,若找到,返回该元素在数组中的下表,否则,返回不存在提示信息. #include<stdio.h> #include<stdlib.h> int *bubble_sort(int a[],int n)//冒泡排序(将数据升序排列) { int i; int j; int tmp; for(j=0;j<n-1;++j)//n个元素需要排序n-1趟 { for(i=0;i<n-j-1;+