1. 直接插入排序算法
- /* --------------------------------------------------------------------------**
- 函数名称: ms_insert_direct_sort
- 参数含义: int data[] (i/o) 排序数组
- int n (i) 数组中数据的个数
- int order (i) 序列方式 (0 为递减,1 为递增)
- 功能简称: 直接插入排序。
- 功能描述: 将数组data[]中的n个数据按制定的方式进行排序。
- 实现描述: 在插入第i个记录的时候,前面的i-1个记录已经排好序,这时将记录的关键字
- 依次与前面i-1个记录的关键字进行比较,从而找出要插入的位置,然后将第
- i个记录插入,插入位置以及其后的记录以此向后移动。
- 创建日期: 2008年12月27日。
- / ---------------------------------------------------------------------------*/
- void ms_insert_direct_sort(int data[], int n, int order)
- {
- int i;
- int j;
- int k;
- int key;
- bool exchg;
- for ( i=0; i<n; i++)
- {
- key = data[i];
- for ( j=0; j<i; j++ )
- {
- exchg = false;
- ms_data_order(exchg, data[j], key, order);
- if ( exchg )
- {
- for ( k=i; k>j; k--)
- {
- data[k] = data[k-1];
- }
- data[j] = key;
- break;
- }
- }
- }
- }
2. 冒泡排序算法
- /* --------------------------------------------------------------------------**
- 函数名称: ms_bubble_sort
- 参数含义: int data[] (i/o) 排序数组
- int n (i) 数组中数据的个数
- int order (i) 序列方式 (0 为递减,1 为递增)
- 功能简称: 冒泡排序。
- 功能描述: 将数组data[]中的n个数据按制定的方式进行排序。
- 实现描述: 首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则
- 交换两个记录的值,然后比较第二个记录的关键字和第三个记录的关键字,
- 以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止,上述
- 过程称作第一趟冒泡排序,其结果是关键字符合排序要求的记录被安置到第
- n个记录的位置上,然后进行第二趟冒泡排序,对前n-1个记录进行同样的操
- 作,其结果是第第二个符合排序要求的记录被安置到第n-1个记录的位置上,
- 当进行完第n-1趟时,所有记录有序排列。
- 创建日期: 2008年12月27日。
- / ---------------------------------------------------------------------------*/
- void ms_bubble_sort(int data[], int n, int order)
- {
- int i;
- int j;
- int tag;
- int temp;
- bool exchg = false;
- for ( i=0, tag=1; tag==1 && i<n-1; i++ )
- {
- tag = 0;
- for ( j=0 ; j<n-i-1; j++ )
- {
- exchg = false;
- ms_data_order(exchg, data[j], data[j+1], order);
- if ( exchg )
- {
- temp = data[j];
- data[j] = data[j+1];
- data[j+1] = temp;
- tag = 1;
- }
- }
- }
- }
3. 选择排序算法
- /* --------------------------------------------------------------------------**
- 函数名称: ms_select_sort
- 参数含义: int data[] (i/o) 排序数组
- int n (i) 数组中数据的个数
- int order (i) 序列方式 (0 为递减,1 为递增)
- 功能简称: 简单选择排序。
- 功能描述: 将数组data[]中的n个数据按制定的方式进行排序。
- 实现描述: 通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小(最大)的
- 的记录,并个第i(1<=i<=n)个记录进行交换,当i等于n时所有的记录有序
- 排列。
- 创建日期: 2008年12月27日。
- / ---------------------------------------------------------------------------*/
- void ms_select_sort(int data[], int n, int order)
- {
- int i;
- int j;
- int k;
- int temp;
- bool exchg = false;
- for ( i=0; i<n-1; i++ )
- {
- k = i;
- for ( j=i+1; j<n; j++ )
- {
- exchg = false;
- ms_data_order(exchg, data[k], data[j], order);
- if ( exchg )
- {
- k = j;
- }
- if ( k!=i )
- {
- temp = data[i];
- data[i] = data[k];
- data[k] = temp;
- }
- }
- }
- }
4. 希尔排序算法
- /* --------------------------------------------------------------------------**
- 函数名称: ms_shell_sort
- 参数含义: int data[] (i/o) 排序数组
- int n (i) 数组中数据的个数
- int order (i) 序列方式 (0 为递减,1 为递增)
- 功能简称: 希尔排序。
- 功能描述: 将数组data[]中的n个数据按制定的方式进行排序。
- 实现描述: 先将整个待排记录序列分割成若干序列,然后分别进行直接插入排序,待整个
- 序列中的记录基本有序时,再对全体记录进行一次直接插入排序。
- 创建日期: 2008年12月27日。
- / ---------------------------------------------------------------------------*/
- void ms_shell_sort(int data[], int n, int order)
- {
- int i;
- int j;
- int k;
- int m;
- int key;
- bool exchg;
- k = n;
- int *delta;
- int dk;
- int cdk;
- delta = (int*)malloc(sizeof(int) * (n/2));
- memset(delta,0,sizeof(int) * (n/2));
- i = 0;
- do
- {
- k = k / 2;
- delta[i++] = k;
- }while(k>0);
- cdk = i - 1;
- for ( m=0; m<cdk; m++ )
- {
- dk = delta[m];
- for ( i=0; i<n; )
- {
- key = data[i];
- for ( j=0; j<i; )
- {
- exchg = false;
- ms_data_order(exchg, data[j], key, order);
- if ( exchg )
- {
- for ( k=i; k>j; )
- {
- if ( k-dk >= 0)
- {
- data[k] = data[k-dk];
- }
- k = k - dk;
- }
- data[j] = key;
- break;
- }
- j = j + dk;
- }
- i = i + dk;
- }
- }
- free(delta);
- }