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:\turboc2\10-2\ziliao\sort\hh.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:\n");
43     prin(a,10);
44     sort(a,10);
45     printf("The sorted array is:\n");
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("李四!\n");
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("\n");
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("没找到该元素!!!\n");
67     else
68         printf("该元素的具体位置是 %d \n",k);
69
70     return 0;
71 }
72
73 /*
74     首先要明白,
75     折半查找的前提是数组中的元素已经排好序(无论升序降序都行)
76
77 */
时间: 2024-10-12 02:49:16

C语言-郝斌笔记-006排序及查找的相关文章

C语言-郝斌笔记-002病毒程序示范

病毒程序示范 1 /* 2 龌龊的程序! 3 */ 4 # include <stdio.h> 5 # include <windows.h> 6 # include <malloc.h> 7 #include<cstdlib> 8 9 int main(void) 10 { 11 int c; 12 int i; 13 int j; 14 15 Nihao: 16 printf("1:死机\n"); 17 printf("2:

C语言-郝斌笔记-003数据类型

基本类型数据 整数 整型     —— int      --4字节  短整型   —— short int   ——2字节 长整型   —— long int    ——8字节      浮点数[实数] 单精度浮点数 —— float    ——4字节 双精度浮点数 —— double ——8字节   字符 char                      ——1字节 复合类型数据 结构体 枚举 共用体(已淘汰)

C语言-郝斌笔记-001求二次方程的根

求二次方程的根 1 #include <stdio.h > 2 #include<math.h> 3 int main(void) { 4 //把三个系数保存到计算机中 5 int a = 1; //=不表示相等,表示赋值 6 int b = 4; 7 int c = 4; 8 double delta; //delta存放的是b*b-4*a*c 9 double x1; //存放一元二次方程的其中一个解 10 double x2; //存放一元二次方程的其中一个解 11 delt

C语言-郝斌笔记-005菲波拉契序列

菲波拉契序列 1 /* 2 菲波拉契序列 3 1 2 3 5 8 13 21 34 4 */ 5 6 # include <stdio.h> 7 8 int main(void) 9 { 10 int n; 11 int f1, f2, f3; 12 int i; 13 14 f1 = 1; 15 f2 = 2; 16 17 printf("请输入您需要求的想的序列: "); 18 scanf("%d", &n); 19 20 if (1 ==

C语言-郝斌笔记-004判断是否为回文数

判断是否为回文数 1 # include <stdio.h> 2 3 int main(void) 4 { 5 int val; //存放待判断的数字 6 int m; 7 int sum = 0; 8 9 printf("请输入您需要判断的数字: "); 10 scanf("%d", &val); 11 12 m = val; 13 while (m) 14 { 15 sum = sum * 10 + m%10; 16 m /= 10; 17

C语言-郝斌笔记-007是否为素数

是否为素数 1 # include <stdio.h> 2 3 bool IsPrime(int val) 4 { 5 int i; 6 7 for (i=2; i<val; ++i) 8 { 9 if (val%i == 0) 10 break; 11 } 12 if (i == val) 13 return true; 14 else 15 return false; 16 } 17 18 int main(void) 19 { 20 int m; 21 22 scanf("

C语言郝斌视频笔记

39:Printf的%#X的话,输出的变量前面会自动加上0X scanf如果包含非输入控制符,那么非输入控制符原样输入.所以在scanf中尽量不要用非输入控制符,尤其是不要使用\n.要是使用了\n的话,输入的时候在输入完数据之后必须原样输入一个\n,按回车没用. 42:/ (除),当两个整数使用这个运算符的时候,结果是整数,小数部分将会被舍弃,将参与运算的两个数中有一个是浮点数或者两个都是浮点数的时候,结果是浮点数. %(取余):不能对浮点数使用这个运算符.取余的运算对象必须是整数,余数的符号与

初探swift语言的学习笔记十一(performSelector)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 在OC中使用好好的performSelector,但不知为什么在swift有意的被拿掉了.更有甚者连IMP, objc_msgSend也不能用了.虽然想不通为什么,但应该有他的道理.就不纠结了. 大家可能在OC中使用得更多的就是延时处理,及后台处

初探swift语言的学习笔记十(block)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 在前面一些学习中,原本把闭包给理解成了block尽管有很多相似之处,但block还是有他自己的独特之外.近日,在写oc/swift混合编码时,有时候需要swift回调oc,oc回调swift . 因此我把swift中的 block 常见的声明和写