排序1

1.冒泡排序
倒序,正序优化,正序
template <class Elem, class Comp>  
void bubsort(Elem A[], int n) { // Bubble Sort  
  for (int i=0; i<n-1; i++)     // Bubble up i'th record  
    for (int j=n-1; j>i; j--)  
      if (Comp::lt(A[j], A[j-1]))  
        swap(A, j, j-1);  
}  
//  int lowindex;  
//  for (int i = 0; i<n - 1; i++) {   // Select i'th record    
//      lowindex = 0;  
//      for (int j = 1; j<n - i ; j++) {   // Find the least value    
//          if (Comp::gt(A[j], A[lowindex])) {  
//              lowindex = j;           // Put it in place    
//          }  
//      }  
//      swap(A, n-i-1, lowindex);//不能用didSwap  
//  }  
//}  
template <class Elem, class Comp>  
void bubsort2(Elem A[], int n) { // Bubble Sort    
    for (int i = 0; i<n - 1; i++) {  
        for (int j = 0; j<n - i - 1; j++) {  
            if (A[j] > A[j + 1]) swap(A, j, j + 1);  
        }  
    }  
} 

2.选择排序(冒泡排序改善)
template <class Elem, class Comp>  
void selsort(Elem A[], int n) { // Selection Sort  
    bool didSwap;int lowindex;  
    for (int i = 0; i<n - 1; i++) {   // Select i'th record  
        didSwap = false;  
        lowindex = i;           // Remember its index  
        for (int j = n - 1; j>i; j--)   // Find the least value  
            if (Comp::lt(A[j], A[lowindex])) {  
                lowindex = j;           // Put it in place  
                didSwap = true;  
            }  
        if (didSwap == false)continue;  
        swap(A, i, lowindex);  
    }  
}  
//template <class Elem, class Comp>  
//void selsort3(Elem A[], int n) { // Selection Sort    
//  bool didSwap;int lowindex;  
//  for (int i = 0; i<n - 1; i++) {   // select i'th record    
//      didSwap = false;  
//      lowindex = i;           // remember its index    
//      for (int j = i + 1; j<n; j++) {   // find the least value    
//          if (Comp::lt(A[j], A[lowindex])) {  
//              lowindex = j;           // put it in place    
//              didSwap = true;  
//          }  
//      }  
//      if (didSwap == false)continue;  
//      swap(A, i, lowindex);  
//  }  
//}  
static void bubble_sort3(int unsorted[], int n)  
{  
    for (int i = 0; i < n - 1; i++)  
    {  
        for (int j = i + 1; j < n; j++)  
        {  
            if (unsorted[i] > unsorted[j])  //只能用i  
            {  
                int temp = unsorted[i];  
                unsorted[i] = unsorted[j];  
                unsorted[j] = temp;  
            }  
        }  
    }  
} 

3.插入排序
template <class elem, class comp>  
void inssort(elem a[], int n) { // insertion sort  
  for (int i=0; i<n-1; i++)       // insert i'th record  
    for (int j=i+1; (j>0) && (comp::lt(a[j], a[j-1])); j--)  
      swap(a, j,j-1);  
}  
  
template <class Elem, class Comp>  
void inssort(Elem A[], int n) { // Inserttion Sort  
    for (int i = 1; i < n; i++)    //从第2个数据开始插入    
    {  
        int j = 0;  
        while (j < i && A[j] <= A[i])    //寻找插入的位置    
            j++;  
  
        if (j < i)    //i位置之前,有比pDataArray[i]大的数,则进行挪动和插入    
        {  
            int k = i;  
            int temp = A[i];  
            while (k > j)    //挪动位置    
            {  
                A[k] = A[k - 1];  
                k--;  
            }  
            A[k] = temp;    //插入    
        }  
    }  
}

4.希尔排序
a)将序列分成子序列,分别对子序列排序
b)再用插入排序完成最后排序工作
// Modified version of Insertion Sort  
template <class Elem, class Comp>  
void inssort2(Elem A[], int n, int from, int incr)   
{  
  for (int i= from + incr; i<n; i+=incr)  
    for (int j=i; j> from && Comp::lt(A[j],A[j-incr]); j-=incr)  
        swap(A, j, j-incr);  
}  
  
template <class Elem, class Comp>  
void shellsort(Elem A[], int n) { // Shellsort  
  for (int i=n/2; i>=1; i/=2)  // For each incr  
    for (int j=0; j<i; j++)   // Sort sublists  
      inssort2<Elem,Comp>(A, n, j, i);     
}  
  
// Modified version of Insertion Sort for varying increments  
//template <class Elem, class Comp>  
//void inssort2(Elem A[], int n, int incr) {  
//  for (int i=incr; i<n; i+=incr)  
//    for (int j=i;  
//         (j>=incr) && (Comp::lt(A[j], A[j-incr])); j-=incr)  
//      swap(A, j, j-incr);  
//}  
//  
//template <class Elem, class Comp>  
//void shellsort(Elem A[], int n) { // Shellsort  
//  for (int i=n/2; i>2; i/=2)      // For each increment  
//    for (int j=0; j<i; j++)       // Sort each sublist  
//      inssort2<Elem,Comp>(&A[j], n-j, i);  
//  inssort2<Elem,Comp>(A, n, 1);  
//}  

a)
innsort(A,16,0,4)

innsort(A,16,1,4)

innsort(A,16,2,4)

innsort(A,16,3,4)


b)
innsort(A,16,0,4)执行过程




资源下载链接为: https://pan.quark.cn/s/502b0f9d0e26 计算机体系结构是计算机科学与技术领域极为关键的课程,它聚焦于硬件与软件的交互以及计算系统设计优化的诸多方面。国防科技大学作为国内顶尖工科院校,其计算机体系结构课程备受瞩目。本课件汇集了该课程的核心内容,致力于助力学生深入探究计算机工作原理。 课件内容主要涵盖以下要点:其一,计算机基本组成,像处理器(CPU)、内存、输入/输出设备等,它们是计算机硬件系统基石,明晰其功能与工作模式对理解计算机整体运行极为关键。其二,指令集体系结构,涵盖不同指令类型,如数据处理、控制转移指令等的执行方式,以及 RISC 和 CISC 架构的差异与优劣。其三,处理器设计,深入微架构设计,如流水线、超标量、多核等技术,这些是现代处理器提升性能的核心手段。其四,存储层次结构,从高速缓存到主内存再到外部存储器,探究存储层次缘由、工作原理及数据访问速度优化方法。其五,总线和 I/O 系统,学习总线协议,了解数据、地址、控制信号在组件间传输方式,以及 I/O 设备分类与交互方式,如中断、DMA 等。其六,虚拟化技术,讲解如何利用虚拟化技术使多个操作系统在同硬件平台并行运行,涉及虚拟机、容器等概念。其七,计算机网络与通信,虽非计算机体系结构主体,但会涉及计算机间通信方式,像 TCP/IP 协议栈、网络接口卡工作原理等。其八,计算机安全与可靠性,探讨硬件层面安全问题,如物理攻击、恶意硬件等及相应防御举措。其九,计算机体系优化,分析性能评估指标,如时钟周期、吞吐量、延迟等,学习架构优化提升系统性能方法。其十,课程习题与题库,通过实际题目训练巩固理论知识,加深对计算机体系结构理解。 国防科大该课程不仅理论扎实,还可能含实践环节,让学生借助实验模拟或真实硬件操作深化理解。课件习题集为学习者提供丰富练习机会,助力掌握课程内容。共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值