`
TRAMP_ZZY
  • 浏览: 138840 次
社区版块
存档分类
最新评论

排序算法C++

    博客分类:
  • C++
c++ 
阅读更多
#include <iostream>
#include <string>
using namespace std;

#define MAXSIZE 30
typedef struct {
int key;
string name;
}RedType;

typedef struct SqList {
RedType r [MAXSIZE+1];
int length;
}SqList;

//插入排序
///////////////////////////////////////////////////////////////////
//直接插入排序 时间复杂度O(n2)
//r[0]处设为哨兵

void insertSort(SqList &L) {
for (int i=2; i<=L.length; i++) {
if (L.r[i].key < L.r[i-1].key) {
L.r[0] = L.r[i]; //把较小的放在哨兵位置
L.r[i] = L.r[i-1]; //把较大的后移
for (int j=i-2; L.r[0].key<L.r[j].key;--j) {
L.r[j+1] = L.r[j];
}
L.r[j+1] = L.r[0];
}
}
}
//////////////////////////////////////////////////////////////////
void insertS(SqList &L) {
for (int i=2; i<=L.length;i++) {
if (L.r[i].key<L.r[i-1].key) {
L.r[0] = L.r[i];
L.r[i] = L.r[i-1];

for (int j=i-2; L.r[0].key<L.r[j].key; --j) {
L.r[j+1] = L.r[j];
}
L.r[j+1] = L.r[0];
}
}

}
///////////////////////////////////////////////////////////////////
//折半插入排序
void BinsertSort(SqList &L) {
for (int i=2; i<=L.length; ++i) {
L.r[0] = L.r[i];
int low = 1, high = i-1;
while (low <= high) {  //找到插入点
int m = (low+high)/2;
if (L.r[0].key<L.r[m].key) {
high = m-1;
}else {
low = m+1;
}
}
for (int j=i-1; j>=high+1; --j) {  //记录后移
L.r[j+1] = L.r[j];
}
L.r[high+1] = L.r[0];  //插入r[0]
}

}
//////////////////////////////////////////////////////
//希尔排序
void ShellInsert(SqList &L, int dk) {
for (int i=dk+1; i<=L.length; ++i) {
if (L.r[i].key<L.r[i-dk].key) {
L.r[0] = L.r[i];
for (int j=i-dk; j>0&&L.r[0].key<L.r[j].key; j-=dk) {
L.r[j+dk] = L.r[j];
}
L.r[j+dk] = L.r[0];
}
}
}
void ShellSort(SqList &L,int dt[], int t) {
for (int k=0; k<t; ++k){
ShellInsert(L,dt[k]);
}
}
//交换排序
///////////////////////////////////////////////////////
//冒泡排序 时间复杂度O(n2)
void BubbleSort(SqList &L) {
int m= L.length-1;
bool flag = true;
while(m>0&&flag) {
flag =false;
for (int j=1; j<m; j++) {
if (L.r[j].key > L.r[j+1].key) {
flag = true;
RedType temp;
temp = L.r[j];
L.r[j] = L.r[j+1];
L.r[j+1] = temp;
}
}
--m;
}

}
//////////////////////////////////////////////////////////
void bubbleSort(SqList &L) {

for (int i=0; i<L.length;i++) {
for (int j=i; j<L.length-1-i; i++) {
if (L.r[j].key>L.r[j+1].key) {
RedType temp;
temp = L.r[j];
L.r[j] = L.r[j+1];
L.r[j+1] = temp;
}
}
}

}
//快速排序 O(nlog2n)
//////////////////////////////////////////////////////
int Partition(SqList &L, int low, int high) {
L.r[0] = L.r[low];
int pivotkey = L.r[low].key;

while (low < high) {
while (low <high&&L.r[high].key >= pivotkey) --high;
L.r[low] = L.r[high]; //比枢轴记录小的移动到低端
while (low<high&&L.r[low].key <= pivotkey) ++low;
L.r[high] = L.r[low];  //比枢轴记录大的移动到低端

}
L.r[low] = L.r[0];   //枢轴记录到位
return low;
}

void QSort(SqList &L, int low, int high) {
if (low < high) {
int pivotloc = Partition(L, low, high);  //找到第一次的枢轴位置
QSort(L, low, pivotloc-1);
QSort(L, pivotloc+1, high);
}

}
//调用 Qsort(L, 1, L.length);

//////////////////////////////////////////////////////
//选择排序 时间复杂度 O(n2)
void SelectSort(SqList &L) {
for (int i=1; i<L.length; i++) {
int k = i;
for (int j=i+1; j<=L.length; ++j) { //选择挂件子最小的记录
if(L.r[j].key<L.r[k].key) {
k = j;
}
}
if (k!=i) {
RedType temp;
temp = L.r[i];
L.r[i] = L.r[k];
L.r[k] = temp;
}
}
}
//////////////////////////////////////////////////////
分享到:
评论

相关推荐

    面试题 写一个堆排序算法 c++

    一个堆排序算法 c++写的 逻辑相同 可自行 改为java 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一...

    经典的排序算法C++实现大全

    本资源“经典的排序算法C++实现大全”提供了九种不同的排序算法,每种都有C++语言的实现,并且包含了算法的简要介绍。以下是对这些经典排序算法的详细讲解: 1. 冒泡排序(Bubble Sort):这是一种简单的排序算法,...

    插入排序算法c++实现

    综上所述,"插入排序算法c++实现"涉及到C++基础语法、数组与指针操作、循环和条件控制、排序算法原理、性能分析以及良好的编程习惯等多个方面。通过实践这个项目,开发者不仅可以深入理解插入排序算法,还能提升C++...

    各种经典排序算法C++/C

    这个压缩包文件"各种经典排序算法C++/C"显然包含了多种使用C++和C语言实现的排序算法。以下是对这些算法的详细介绍: 1. **冒泡排序**(Bubble Sort):冒泡排序是最基础的排序算法之一,通过重复遍历待排序的数列...

    冒泡排序算法c++实现

    冒泡排序是一种基础的排序算法,它通过重复遍历待排序的序列,比较相邻元素并交换位置,使得每个元素都能逐步“浮”到正确的位置上。在这个过程中,最大(或最小)的元素会像气泡一样逐渐上升到序列的顶端。这种算法...

    希尔、快速、堆排序算法C++源码

    文件是.Cpp 里面提供了希尔排序、快速排序、堆排序(大小顶堆)算法C++源码

    考研排序算法C++实现

    考研排序算法C++实现

    十大排序算法c++实现_fish.rar

    十大排序算法c++实现,建议结合下面这篇文章看 ...

    排序算法C++.txt

    排序算法C++.txt

    十大排序算法C++代码

    十大排序算法C++代码

    高级排序算法C++源码

    在IT领域,排序算法是计算机...通过阅读和理解`高级排序.cpp`文件,你可以了解到如何在C++中实现这些高级排序算法,并从中学习如何优化和比较排序算法的性能。这将对提升你的编程技能和理解复杂数据处理有极大的帮助。

    七大排序算法c++实现

    七大排序算法C++实现,包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序。代码随机生成数组来排序,MAX1定义了数组个数,用QueryPerformanceCounterday打印除了各算法用时。

    快速排序算法c++实现

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法,通过选取一个“基准”元素,将数组分为两个子数组,使得左边的元素都小于基准,右边的元素都大于基准,然后对这...

    排序算法c++

    本文将深入探讨标题为“排序算法c++”的资源,其中包括了冒泡排序、选择排序和快速排序这三种常见的排序算法,并通过sort.cpp文件进行实现。 1. **冒泡排序**: 冒泡排序是一种简单的交换排序,它通过重复遍历待...

    c++排序算法

    此排序算法为本人平常学习练习所写,在学习的过程中也是非常希望和大家分享交流

    C++语言的算法实现包括插入排序冒泡排序堆排序快速排序

    在编程领域,排序算法是数据处理的核心部分,尤其是在C++这样的高级编程语言中。本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并...

    C++堆排序实现算法

    简单的堆排序算法:以定长数组为例,动态数组等可以以此类推

    常用排序算法C++面向对象实现.doc

    【排序算法的C++面向对象实现】 在计算机科学中,排序是处理数据的重要步骤,它旨在将一组无序的数据转化为有序的数据序列。根据处理方式,排序可以分为内部排序和外部排序。内部排序是指整个排序过程都在内存中...

    常见排序算法C++实现

    在编程领域,排序算法是数据结构与算法学习中的基础部分,尤其在C++这样的系统级编程语言中,理解和掌握各种排序算法的实现至关重要。这里我们将深入探讨标题中提到的五种排序算法——归并排序、快速排序、希尔排序...

    各种排序算法c++源代码

    在编程领域,排序算法是计算机科学中的基础但至关重要的部分,尤其在C++这样的系统级编程语言中。本文将深入探讨在C++中实现的各种排序算法,包括它们的工作原理、效率以及如何用C++代码来表达。 首先,我们来看...

Global site tag (gtag.js) - Google Analytics