zoukankan      html  css  js  c++  java
  • 排序——数据结构课程作业

     (╥╯^╰╥)

     1 /*
     2 请设计直接插入排序算法函数void insertSort(int a[],int n),对a[1]..a[n]进行升序排序。
     3 并测试在不同数据规模下的排序效率。
     4 */
     5 #include "Arrayio.h"
     6 #define N 10000     /*N为数据量大小,因data1.txt中只有50万个数,所以自行设定N值时需让N<=500000*/
     7 
     8 /*请将本函数补充完整,并进行测试*/
     9 void insertSort(int a[],int n)
    10 {
    11     /*直接插入排序*/
    12     int i;
    13     for(i=2; i<=n; i++)
    14     {
    15         if(a[i]<a[i-1])
    16         {
    17             int j = i-1;
    18             int tmp = a[i];
    19             while(tmp<a[j])
    20             {
    21                 a[j+1] = a[j];
    22                 j--;
    23             }
    24             a[j+1] = tmp;
    25         }
    26     }
    27 }
    28 
    29 int  main()
    30 {
    31     int a[N+1],n;                     /*数据存储在a[1]...a[N]中*/
    32     printf("数据初始化...
    ");
    33     n=readData(a,N,"data1.txt");      /*从data1.txt中读入N个整数存入数组a,n为实际读入的数据个数*/
    34     printf("%d个数据排序中...
    ",n);
    35     insertSort(a,n);
    36     saveData(a,n,"out.txt");          /*排序结果存放在out.txt文件中*/
    37     printf("排序结束,排序结果保存在out.txt文件中。
    ");
    38     return 0;
    39 }
    直接插入排序
     1 /*
     2 请设计二分插入排序算法函数void binInsertSort(int a[],int n),对a[1]..a[n]进行升序排序。
     3 并测试在不同数据规模下的排序效率。
     4 */
     5 #include "Arrayio.h"
     6 #define N 10000     /*N为数据量大小,因data1.txt中只有50万个数,所以自行设定N值时需让N<=500000*/
     7 #include <algorithm>
     8 
     9 using namespace std;
    10 
    11 
    12 /*请将本函数补充完整,并进行测试*/
    13 void insertSort(int a[],int n)
    14 {
    15     /*直接插入排序*/
    16     for(int i=2; i<=n; i++)
    17     {
    18         if(a[i]<a[i-1])
    19         {
    20             int j = i-1;
    21             int tmp = a[i];
    22             while(tmp<a[j])
    23             {
    24                 a[j+1] = a[j];
    25                 j--;
    26             }
    27             a[j+1] = tmp;
    28         }
    29     }
    30 }
    31 
    32 void binInsertSort(int a[],int n)
    33 {
    34     for(int i=2;i<=n;i++) {
    35         if(a[i]<a[i-1]) {
    36             int pos = lower_bound(a+1,a+i,a[i]) - a;
    37             for(int j=i-1;j<=pos+1;j--)
    38                 a[j+1] = a[j];
    39             a[pos+1] = a[i];
    40         }
    41     }
    42 }
    43 
    44 int  main()
    45 {
    46     int a[N+1],n;                     /*数据存储在a[1]...a[N]中*/
    47     printf("数据初始化...
    ");
    48     n=readData(a,N,"data1.txt");      /*从data1.txt中读入N个整数存入数组a,n为实际读入的数据个数*/
    49     printf("%d个数据排序中...
    ",n);
    50     insertSort(a,n);
    51     saveData(a,n,"out.txt");          /*排序结果存放在out.txt文件中*/
    52     printf("排序结束,排序结果保存在out.txt文件中。
    ");
    53     return 0;
    54 }
    二分插入排序
     1 /*
     2 请设计shell排序算法函数void shellSort(int a[],int n),对a[1]..a[n]进行升序排序。
     3 并测试在不同数据规模下的排序效率。
     4 */
     5 #include "Arrayio.h"
     6 #define N 10000     /*N为数据量大小,因data1.txt中只有50万个数,所以自行设定N值时需让N<=500000*/
     7 
     8 /*请将本函数补充完整,并进行测试*/
     9 void shellSort(int a[],int n)
    10 {
    11     for(int d=n/2;d>=1;d=d/2)
    12     {
    13         for(int i=d+1;i<=n;i++) {
    14             int tmp = a[i];
    15             int j;
    16             for(j=i-d;j>0&&tmp<a[j];j=j-d) {
    17                 a[j+d] = a[j];
    18             }
    19             a[j+d] = tmp;
    20         }
    21     }
    22 
    23 }
    24 
    25 int  main()
    26 {
    27     int a[N+1],n;                     /*数据存储在a[1]...a[N]中*/
    28     printf("数据初始化...
    ");
    29     n=readData(a,N,"data1.txt");      /*从data1.txt中读入N个整数存入数组a,n为实际读入的数据个数*/
    30     printf("%d个数据排序中...
    ",n);
    31     shellSort(a,n);
    32     saveData(a,n,"out.txt");          /*排序结果存放在out.txt文件中*/
    33     printf("排序结束,排序结果保存在out.txt文件中。
    ");
    34     return 0;
    35 }
    shell排序算法
     1 /*
     2 请设计简单选择排序算法函数void selectSort(int a[],int n),对a[1]..a[n]进行升序排序。
     3 并测试在不同数据规模下的排序效率。
     4 */
     5 #include "Arrayio.h"
     6 #define N 10000     /*N为数据量大小,因data1.txt中只有50万个数,所以自行设定N值时需让N<=500000*/
     7 #include <algorithm>
     8 
     9 using namespace std;
    10 
    11 /*请将本函数补充完整,并进行测试*/
    12 void selectSort(int a[],int n)
    13 {
    14     for(int i=1;i<n;i++) {
    15         int k = i;
    16         for(int j=i+1;j<=n;j++) {
    17             if(a[j]<a[k])
    18                 k = j;
    19         }
    20         if(k!=i)
    21         {
    22             swap(a[i],a[k]);
    23         }
    24     }
    25 }
    26 
    27 int  main()
    28 {
    29     int a[N+1],n;                     /*数据存储在a[1]...a[N]中*/
    30     printf("数据初始化...
    ");
    31     n=readData(a,N,"data1.txt");      /*从data1.txt中读入N个整数存入数组a,n为实际读入的数据个数*/
    32     printf("%d个数据排序中...
    ",n);
    33     selectSort(a,n);
    34     saveData(a,n,"out.txt");          /*排序结果存放在out.txt文件中*/
    35     printf("排序结束,排序结果保存在out.txt文件中。
    ");
    36     return 0;
    37 }
    简单选择排序算法
     1 /*
     2 请设计筛选函数void sift(int a[],int k,int n),对a[k] 进行筛选,
     3 并利用其设计堆排序算法函数void heapSort(int a[],int n),
     4 对a[1]..a[n]进行升序排序。并测试在不同数据规模下的排序效率。(详见lab10_05.c)
     5 */
     6 #include "Arrayio.h"
     7 #define N 10000     /*N为数据量大小,因data1.txt中只有50万个数,所以自行设定N值时需让N<=500000*/
     8 
     9 /*请将本函数补充完整,并进行测试*/
    10 void sift(int a[],int k,int n)
    11 {
    12     int i,j,finished;
    13     i=k;
    14     j=2*i;
    15     a[0]=a[k];
    16     finished=0;
    17     while((j<=n)&&(!finished))
    18     {
    19         if((j<n)&&(a[j+1]>a[j]))
    20             j++;
    21         if(a[0]>=a[j])
    22             finished=1;
    23         else
    24         {
    25             a[i]=a[j];
    26             i=j;
    27             j=2*j;
    28         }
    29     }
    30     a[i]=a[0];
    31 }
    32 
    33 void heapSort(int a[],int n)
    34 {
    35     int i;
    36     for (i=n/2; i>=1; i--)
    37         sift(a,i,n);
    38     for (i=n; i>1; i--)
    39     {
    40         a[0]=a[i];
    41         a[i]=a[1];
    42         a[1]=a[0];
    43         sift(a,1,i-1);
    44     }
    45 }
    46 
    47 int  main()
    48 {
    49     int a[N+1],n;                     /*数据存储在a[1]...a[N]中*/
    50     printf("数据初始化...
    ");
    51     n=readData(a,N,"data1.txt");      /*从data1.txt中读入N个整数存入数组a,n为实际读入的数据个数*/
    52     printf("%d个数据排序中...
    ",n);
    53     heapSort(a,n);
    54     saveData(a,n,"out.txt");          /*排序结果存放在out.txt文件中*/
    55     printf("排序结束,排序结果保存在out.txt文件中。
    ");
    56     return 0;
    57 }
    堆排序算法
     1 /*
     2 请设计冒泡排序算法函数void bubbleSort(int a[],int n),对a[1]..a[n]进行升序排序。
     3 并测试在不同数据规模下的排序效率。
     4 */
     5 #include "Arrayio.h"
     6 #define N 10000     /*N为数据量大小,因data1.txt中只有50万个数,所以自行设定N值时需让N<=500000*/
     7 #include <algorithm>
     8 
     9 using namespace std;
    10 
    11 /*请将本函数补充完整,并进行测试*/
    12 void bubbleSort(int a[],int n)
    13 {
    14     for(int i=1;i<=n-1;i++) {
    15         bool flag = true;
    16         for(int j=1;j<=n-i;j++) {
    17             if(a[j]>a[j+1]) {
    18                 swap(a[j],a[j+1]);
    19                 flag = false;
    20             }
    21         }
    22         if(flag) return ;
    23     }
    24 }
    25 
    26 int  main()
    27 {
    28     int a[N+1],n;                     /*数据存储在a[1]...a[N]中*/
    29     printf("数据初始化...
    ");
    30     n=readData(a,N,"data1.txt");      /*从data1.txt中读入N个整数存入数组a,n为实际读入的数据个数*/
    31     printf("%d个数据排序中...
    ",n);
    32     bubbleSort(a,n);
    33     saveData(a,n,"out.txt");          /*排序结果存放在out.txt文件中*/
    34     printf("排序结束,排序结果保存在out.txt文件中。
    ");
    35     return 0;
    36 }
    冒泡排序
     1 /*
     2 请设计快速排序算法函数void quickSort(int a[],int low,int right),对a[low]..a[right]进行升序排序。
     3 并测试在不同数据规模下的排序效率。
     4 */
     5 #include "Arrayio.h"
     6 #define N 10000     /*N为数据量大小,因data1.txt中只有50万个数,所以自行设定N值时需让N<=500000*/
     7 
     8 /*请将本函数补充完整,并进行测试*/
     9 void quickSort(int a[],int low,int right )
    10 {
    11     int i = low, j = right;
    12     int tmp = a[low];
    13     if(low<right)
    14     {
    15         while(i<j)
    16         {
    17             while(i<j&&a[j]>=tmp)
    18                 j--;
    19 
    20             if(i<j)
    21             {
    22                 a[i] = a[j];
    23                 i++;
    24             }
    25 
    26             while(i<j&&a[i]<=tmp)
    27                 i++;
    28 
    29             if(i<j)
    30             {
    31                 a[j] = a[i];
    32                 j--;
    33             }
    34         }
    35         a[i] = tmp;
    36         quickSort(a,low,j-1);
    37         quickSort(a,j+1,right);
    38     }
    39 }
    40 
    41 int  main()
    42 {
    43     int a[N+1],n;                     /*数据存储在a[1]...a[N]中*/
    44     printf("数据初始化...
    ");
    45     n=readData(a,N,"data1.txt");      /*从data1.txt中读入N个整数存入数组a,n为实际读入的数据个数*/
    46     printf("%d个数据排序中...
    ",n);
    47     quickSort(a,1,n);
    48     saveData(a,n,"out.txt");          /*排序结果存放在out.txt文件中*/
    49     printf("排序结束,排序结果保存在out.txt文件中。
    ");
    50     return 0;
    51 }
    快速排序算法
  • 相关阅读:
    【Azure 应用服务】由 Azure Functions runtime is unreachable 的错误消息推导出 ASYNC(异步)和 SYNC(同步)混用而引起ThreadPool耗尽问题
    【Azure API 管理】是否可以将Swagger 的API定义导入导Azure API Management中
    【Azure 应用服务】Azure Function 不能被触发
    【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?
    【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
    【Azure 事件中心】azure-spring-cloud-stream-binder-eventhubs客户端组件问题, 实践消息非顺序可达
    【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)
    【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
    【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
    【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6213206.html
Copyright © 2011-2022 走看看