设为首页 加入收藏

TOP

数据结构--排序(一)
2019-10-09 19:52:16 】 浏览:144
Tags:数据结构 排序

----------------

排序

----------------

冒泡排序思想:

“比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 

 

选择排序思想:

“从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。
 
直接插入排序思想:
“直接插入排序的基本操作是将一个记录插到已排队好的有序表中,从而得到一个新的,记录增1的有序表。(第一个有序表可认为是第一个元素)“
 

 

 

希尔排序思想:
  先取一个小于n的整数d 1作为第一个增量,把文件的全部记录分成d 1个组。所有距离为d l的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d 2<d 1重复上述的分组和排序,直至所取的增量d t=1(d t<d t-l<…<d 2<d 1),即所有记录放在同一组中进行直接插入排序为止。
     该方法实质上是一种分组插入方法。
 
堆排序思想:
待实现
 
归并排序思想:
待实现
 
快速排序思想;
 

 

测试主函数

 1 #include <stdio.h>
 2 #include<stdlib.h>
 3 #include <time.h>
 4 #include "sort.h"
 5 
 6 
 7 int main()
 8 {
 9     ArrayList numlist;
10     PtArrayList pt_arraylist;
11     pt_arraylist = &numlist;
12     while(True){
13         Init_Data(pt_arraylist);
14         show((char *)"排序前 ", pt_arraylist);
15         
16 //        BubbleSort_Low(pt_arraylist);
17 //        BubbleSort_Mid(pt_arraylist);
18 //        BubbleSort_Mid_Opt(pt_arraylist);
19 //        SelectSort_Asc(pt_arraylist);    
20 //        SelectSort_Desc(pt_arraylist);    
21 //        InsertSort(pt_arraylist);
22 //        ShellSort(pt_arraylist);
23 //        QuickSort(pt_arraylist, 0, pt_arraylist->len-1);
24         QuickSort_Opt(pt_arraylist, 0, pt_arraylist->len-1);
25         show((char *)"排序后 ", pt_arraylist);
26     } 
27 
28     
29     return 0;
30 }

 

测试头文件

 1 //sort.h
 2 #define True 1 
 3 #define False 0
 4 #define NUMSIZE 20
 5 typedef struct {
 6     int array[NUMSIZE];
 7     int len;
 8 }ArrayList, *PtArrayList; 
 9 
10 void swap(int * first, int * second);
11 void show(char * info, PtArrayList * pt_arraylist); 
12 void Init_Data(PtArrayList pt_arraylist); 
13 void BubbleSort_Low(PtArrayList * pt_arraylist);
14 void BubbleSort_Mid(PtArrayList * pt_arraylist);
15 void BubbleSort_Mid_Opt(PtArrayList pt_arraylist);
16 void SelectSort_Asc(PtArrayList pt_arraylist);
17 void SelectSort_Desc(PtArrayList pt_arraylist);
18 void InsertSort(PtArrayList pt_arraylist);
19 void ShellSort(PtArrayList pt_arraylist);
20 int FindPos(PtArrayList pt_arraylist, int low, int high);
21 void QuickSort(PtArrayList pt_arraylist, int low, int high);
22 
23 #include "sort_function.cpp"

 

 

 函数具体实现

  1 //sort_function.cpp
  2 void Init_Data(PtArrayList pt_arraylist)
  3 {
  4     char s[] = "请输入不大于20的序列长度";
  5     printf("%s___\b\b",s);
  6     while(!scanf("%d", &pt_arraylist->len) || (pt_arraylist->len > NUMSIZE))
  7     {
  8         printf("%s\n",s);
  9         if(pt_arraylist->len > NUMSIZE)
 10         {
 11             printf("当前序列长度为%d 过长\n", pt_arraylist->len);
 12             continue;
 13         }
 14         scanf("%*s");
 15     }
 16     
 17     srand(time(0)); //随机初始化rand()函数
 18     for(int i=0; i<pt_arraylist->len; i++)
 19     {
 20         pt_arraylist->array[i] = rand()%200-100;
 21     }
 22     
 23 }
 24 
 25 void QuickSort_Opt(PtArrayList pt_arraylist, int low, int high)
 26 {
 27     //快速排序--尾递归优化 
 28     int pos;
 29     while(low<high)
 30     {
 31         pos = FindPos(pt_arraylist, low, high);
 32         QuickSort(pt_arraylist, low, pos-1
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言交换两个指针所指位置的数值 下一篇C语言入门-指针

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目