zoukankan      html  css  js  c++  java
  • C语言-郝斌笔记-006排序及查找

    1.

     1 int partion(int *a, int low, int high)
     2 {
     3    int  value = a[low];
     4    int  t;
     5 
     6    while (low < high)
     7    {
     8       while( high > low && a[high] >= value)
     9          high--;  //会跳到8行的while去执行,而不是转到10行去执行if语句
    10       if(high != low)
    11       {
    12            t = a[low];
    13            a[low] = a[high];
    14            a[high] = t;
    15       }
    16 
    17       while(low < high && a[low] <= value)
    18         low++;
    19       
    20       if(low != high)
    21       {
    22             t = a[low];
    23            a[low] = a[high];
    24            a[high] = t;
    25       }
    26    }
    27    return low;
    28 }

    2.

     1 /*
     2     IBM <数据结构>上的介绍的比普通冒泡排序方法更快速的冒泡排序方法
     3 */
     4 
     5 # include <c:	urboc210-2ziliaosorthh.c>
     6 
     7 /*  该函数用的仍是冒泡排序,唯一不同的是我们加了个标志flag,一旦发现数组
     8 元素没有相互交换,我们就可以提前推出循环,从而节省了时间!
     9 
    10 */
    11 void sort(int *a, int n)  /* 冒泡升序排序 */
    12 {
    13     int  i, flag = 1, j;
    14     int  temp;
    15     
    16     i=1;
    17     while (flag)
    18     {
    19         flag = 0;
    20         for (j=0; j<n-i; ++j)
    21         {
    22             if (a[j] > a[j+1])
    23             {
    24                 temp = a[j];
    25                 a[j] = a[j+1];
    26                 continue; //会跳去执行++j
    27                 a[j+1] = temp;
    28                 flag = 1;
    29                 break; //会跳出for循环,转去执行32行的break语句
    30             } 
    31         }
    32         break; //2 会跳出while循环
    33         ++i;
    34     }
    35 }
    36 
    37 
    38 main()
    39 {
    40     clrscr();
    41     
    42     printf("The array is:
    ");
    43     prin(a,10);
    44     sort(a,10);
    45     printf("The sorted array is:
    ");
    46     prin(a,10);
    47     
    48     getch();
    49     return 0;
    50 }
    51 
    52 /*
    53 最后修改于07年正月初四晚上21:15 远通网吧!
    54 
    55 */

    3.

     1 /*
     2     2007-5-21    
     3     折半查找算法【递归法来实现】
     4 */
     5 
     6 # include <stdio.h>
     7 
     8 /* 
     9     p指向数组首元素,n表示数足长度, val是待查找的元素,如果找到就返回该元素的下标,否则返回-1表
    10     示没有找到 嘿嘿!
    11 */
    12 int Find(int* p, int low, int high, int val)
    13 {
    14     int mid = (low + high) / 2;
    15     
    16     if (low == high)  /* 不会存在low > high 的情况! */
    17     {
    18         if (p[mid] == val)
    19         {
    20             return mid;
    21         }
    22         else
    23         {
    24             return -1;  
    25         }
    26     }
    27     else
    28     {    
    29         if (p[mid] < val)
    30         {
    31             Find(p,mid+1,high,val);
    32         }
    33         else if (p[mid] > val)
    34         {
    35             Find(p,low,mid-1,val);
    36         }
    37         else if (p[mid] == val) /* 最后这个else..if不要漏掉了,当然if (p[mid] == val)也可不写 */
    38         {
    39             return mid;    
    40         }
    41     }
    42     
    43     printf("李四!
    ");
    44 }
    45 
    46 
    47 
    48 void Traverse(int* p, int n)
    49 {
    50     for (int i=0; i<n; ++i)
    51         printf("%-5d",p[i]);
    52     
    53     printf("
    ");
    54 }
    55 
    56 
    57 int main(void)
    58 {
    59     int a[10] = {-10,1,23,54,55,76,88,100,200,9897};
    60     
    61     puts("原始数组的内容是:");
    62     Traverse(a,10);
    63     
    64     int k = Find(a,0,9,-10);
    65     if (-1 == k)
    66         printf("没找到该元素!!!
    ");
    67     else
    68         printf("该元素的具体位置是 %d 
    ",k);
    69     
    70     return 0;
    71 }
    72 
    73 /*
    74     首先要明白,
    75     折半查找的前提是数组中的元素已经排好序(无论升序降序都行)
    76     
    77 */
  • 相关阅读:
    浅入深出Vue:数据绑定
    浅入深出Vue:数据渲染
    浅入深出Vue:环境搭建
    浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置
    浅入深出Vue:工具准备之WebStorm安装配置
    【重点突破】—— react使用http-proxy-middleware反向代理跨域
    【重点突破】—— 工作中git分支的基本使用
    【营销小程序】—— webview嵌套web端项目(原生开发支付功能)
    【营销App】—— react/ant design mobile项目爬坑
    【重点突破】—— UniApp微信小程序开发教程学习Three
  • 原文地址:https://www.cnblogs.com/shamgod/p/5394911.html
Copyright © 2011-2022 走看看