zoukankan      html  css  js  c++  java
  • 常用查找排序算法

    1.折半查找算法:

    对于一个已排好序的数组,若要查找某元素是否属于数组中,则可以用这种算法。

    返回找到的元素在数组中的下标,找不到则返回-1 #include <stdio.h>

    #define LEN 8
    int a[LEN] = { 1, 3, 3, 3, 4, 5, 6, 7 };
    
    int binarysearch(int number)
    {
    	int mid, start = 0, end = LEN - 1;
    
    	while (start <= end) {
    		mid = (start + end) / 2;
    		if (a[mid] < number)
    			start = mid + 1;
    		else if (a[mid] > number)
    			end = mid - 1;
    		else
    			return mid;
    	}
    	return -1;
    }
    
    折半查找的递归实现:
    int binarysearch(int number,int start,int end){
    int mid;
    if(start <= end) {
    mid = (start + end) / 2;
    if (a[mid] < number)
     binarysearch(number,mid+1,end);
    		else if (a[mid] > number)
    binarysearch(number,start,mid-1);
    		else
    		   return mid;
    	}
    	return -1;
    }

    2.选择排序法:总需排N-1次
    算法:
    第1次:找到数组中的最小的元素与第一个元素交换位置
    第2次:从第二个元素开始,找到当前数组中的最小元素与第二个元素交换位置
    第3次:从第三个元素开始,找到当前数组中的最小元素与第三个元素交换位置
    .
    .
    .
    第N-1: 同上。。。

        void sort(int list[],int n){

           int i,j,min,temp;

           for(i = 0;i<n-1;i++){

              min = i;

              for(j = i+1;j<n;j++)

                   if(list[j]<list[min])

                      min = j;

             temp = list[i];

             list[i] = list[min];

             list[min] = temp;

         }

    }

    3.插入排序算法类似于玩扑克时抓牌的过程,玩家每拿到一张牌都要插入到手中已有的牌里,使之从小到大排好序。

    #include <stdio.h>
    
    #define LEN 5
    int a[LEN] = { 10, 5, 2, 4, 7 };
    
    void insertion_sort(void)
    {
    	int i, j, key;
    	for (j = 1; j < LEN; ++j) {
    		printf("%d, %d, %d, %d, %d
    ",
    		       a[0], a[1], a[2], a[3], a[4]);
    		key = a[j];
    		i = j - 1;
    		while (i >= 0 && a[i] > key) {
    			a[i+1] = a[i];
    			--i;
    		}
    		a[i+1] = key;
    	}
    	printf("%d, %d, %d, %d, %d
    ",
    	       a[0], a[1], a[2], a[3], a[4]);
    }
    
    int main(void)
    {
    	insertion_sort();
    	return 0;
    }
  • 相关阅读:
    JavaScript 正则表达式中的特殊字符
    framework —— throttles(访问频率控制)
    framework —— permission(权限)
    framework —— auth认证
    算法——基础知识
    算法——解迷宫
    算法
    爬虫 ==》 同步调用
    asyncio模块
    Requests模块
  • 原文地址:https://www.cnblogs.com/wuxinqiu/p/3837401.html
Copyright © 2011-2022 走看看