插入排序,快速排序

//#include <stdio.h>             // c 库
#include <stdlib.h>                //maclloc 库
#include <iostream>                // c++ 库

// 有本句 ,下面cout 前面可以没有  std::
using namespace std;

typedef int  ElemType;  //元素数据类型 int 

void Traver(ElemType B[], int len)
{
    cout << "\n------------\n";
    for (int i = 1; i <= len; i++) {
        cout << B[i] << " ";
    }
    cout << "\n------------\n";
}

void swap(ElemType& a, ElemType& b) {
    ElemType temp;
    temp = a;
    a = b;
    b = temp;
}

//插入排序
//i从1开始,至N-1(其后仅剩一个),拿着第i个和其后的每一个比,
// 找到最小的元素位置,第i个和最小的交换后,第i个排列完成,因i从1是开始因此前面的都已排列完成。
void SelSort(ElemType B[], int N) {
    ElemType MinPos;
    int i, j;
    for (i = 1; i <= N; i++) {
        MinPos = i;
        for (j = i + 1; j <= N; j++)
            if (B[MinPos] > B[j])
                MinPos = j;
        if (i != MinPos)
            swap(B[i], B[MinPos]);
    }
}

// 划分两部分,找枢纽位置,搬运数据
//划分成以 pivot 为枢纽的两部分,左大于枢纽,左小于枢纽
//low high 分别指待排序的元素起始下标和结束下标。 假设以B[low]值为枢纽,将B[low]搬运到枢纽  
//当high指向元素满足大于枢纽时,移动high指针,直到B[high]小于枢纽,将值搬运到B[low]
//当low指向元素满足小于枢纽时,移动low指针,直到B[low]大于枢纽,将值搬运到B[high]
// 继续搬运,直到low==high
//当high指向元素满足大于枢纽时,移动high指针,直到B[high]小于枢纽,将值搬运到B[low]
//当low指向元素满足小于枢纽时,移动low指针,直到B[low]大于枢纽,将值搬运到B[high]
//结束循环,将枢纽的值搬到枢纽应呆的地方
int Partition(ElemType B[], int low, int high) {
    ElemType pivot = B[low];
    while (low < high) {
        while (low < high && B[high] >= pivot)
            --high;
        B[low] = B[high];
        while (low < high && B[low] <= pivot)
            ++low;
        B[high] = B[low];
    }
    B[low] = pivot;
    return low;
}
//快速排序递归算法 //第一层执行时,(一般)换分为两大部分 //对左部分进行划分,对右部分进行划分。 然后先执行左划分进入第二层循环(第一层里循环的右划分未开始执行,左边全部递归完成),第二层仍然先执行其左划分 …………
//直到某一层的左边执行完,开始进行那一层的右(从本层povit+1起,high乃其上一层的枢纽位置-1),右可能又需要递归并左划分有划分。每层第右执行完,递归返回上一层。
void QuickSort(ElemType B[], int low, int high) { if (low < high) { int povit = Partition(B, low, high); QuickSort(B, low, povit - 1); QuickSort(B, povit + 1, high); } } //递归法求累加和 //归并、快速等排序使用了递归 ,再熟悉下递归 int Sum(int N) { int sum; if (N == 1) return 1; else sum = Sum(N - 1) + N; } void main() { int B[] = { 0,50,40,30,20,10,1,2 }; //Traver(B, 3); //选择排序 //SelSort(B, 7); //快速排序 QuickSort(B, 1, 7); Traver(B, 7); //计算前N项和 int N = 100; int sum = Sum(N); cout << endl << "Sum(" << N << ") = " << sum; }

 

posted @ 2021-09-16 14:41  abel2020  阅读(76)  评论(0编辑  收藏  举报