1 /**********************************************************************************************************
2 * Function : test
3 * Create Date : 2014/03/23
4 * Author : NTSK13
5 * Email : [email protected]
6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
7 任何单位和个人不经本人允许不得用于商业用途
8 转载请注明 转自 http://blog.csdn.net/beijiwei
9 * Version : V0.1
10 * date : 2014/03/23
11 * history : V0.1
12 ***********************************************************************************************************
13
14 算法基础之排序(1)--冒泡排序 改进
15
16
17 基本思想: 对待排序的一组数据从前之后进行扫描,若发现相邻的两个数不同时,将这两个数进行交换.
18 升序和降序是同样道理.
19
20 假如待排序的一组数存于array[N],则需要对数组进行N-1次扫描
21
22 第1次扫描: array[0]和array[1]对比交换,之后array[1]和array[2]对比交换...array[N-1] 和array[N]对比交换.
23 第2次扫描: array[0]和array[1]对比交换,之后array[1]和array[2]对比交换...array[N-1] 和array[N]对比交换.
24 .
25 .
26 .
27 第N-1次扫描: array[0]和array[1]对比交换,之后array[1]和array[2]对比交换...array[N-1] 和array[N]对比交换.
28 结束.
29
30 缺点: 如果N>>100很大,当在第3次扫描结束之后,发现数据已经按照要求排列好了, 则以后的操作就是浪费功夫.
31
32 改进: 在一次扫描时,设一个标志位,若某次扫描结束,标志位没有置位,则退出
33
34
35 **********************************************************************************************************/
36 #include<stdio.h>
37
38 int main()
39 {
40 int i=0,j=0,tmp=0,flag=0;
41 int array[10]={1,2,0,3,4,5,6,7,8,9};
42
43 printf("Before sort, The element of array is: \n");
44
45 for(i=0;i<10;i++) 47 printf("%d \t",array[i]); 49 /*********************************************************************************************************/
50 for(i=0;i<9;i++)
51 {
52 flag=0;
53 for(j=0;j<9;j++)
54 {
55 if(array[j]>array[j+1])
56 {
57 tmp=array[j];
58 array[j]=array[j+1];
59 array[j+1]=tmp;
60 flag=1;
61 }
62
63 }
64 if(flag==0)
65 break;
66 }
67 /*********************************************************************************************************/
68 printf("\n After sort, The element of array is: \n");
69 for(i=0;i<10;i++) 71 printf("%d \t",array[i]); 73
74 printf("\n");
75
76 return 0;
77 }
算法基础之排序(1)--冒泡排序 改进,码迷,mamicode.com
时间: 2025-01-13 09:14:36