From 3d31029917ade1b12ddfdb6b77450d8294b663b7 Mon Sep 17 00:00:00 2001 From: Cloud0606 <827594950@qq.com> Date: Sat, 17 Jun 2017 17:20:39 +0800 Subject: [PATCH 1/8] BST --- .../main.c" | 34 ----- .../BST.c" | 138 ++++++++++++++++++ .../BST.h" | 44 ++++++ .../BSTOutput.txt" | 6 + .../main_BST.c" | 11 ++ 5 files changed, 199 insertions(+), 34 deletions(-) create mode 100644 "2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BST.c" create mode 100644 "2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BST.h" create mode 100644 "2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BSTOutput.txt" create mode 100644 "2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_BST.c" diff --git "a/2017-1/Cloud/2.\346\240\210\345\222\214\351\230\237\345\210\227\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main.c" "b/2017-1/Cloud/2.\346\240\210\345\222\214\351\230\237\345\210\227\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main.c" index d1a4ec5e..d82e7e20 100644 --- "a/2017-1/Cloud/2.\346\240\210\345\222\214\351\230\237\345\210\227\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main.c" +++ "b/2017-1/Cloud/2.\346\240\210\345\222\214\351\230\237\345\210\227\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main.c" @@ -1,36 +1,2 @@ #include #include "Queue.h" -int main() { - int _queueLen; - QElemType _e; - LinkQueue lk; - printf("队列初始化...\n"); - InitQueue(&lk); - printf("遍历队列:"); - TraverseQueue(lk); - printf("\n插入新的元素 2\n遍历队列:"); - EnQueue(&lk, 2); - TraverseQueue(lk); - printf("\n插入新的元素 4\n遍历队列:"); - EnQueue(&lk, 4); - TraverseQueue(lk); - printf("\n插入新的元素 6\n遍历队列:"); - EnQueue(&lk, 6); - TraverseQueue(lk); - - GetHead(&lk, &_e); - _queueLen = QueueLength(&lk); - printf("\n*当前头节点为 %d ,队列长度为 %d \n", _e, _queueLen); - DeQueue(&lk, &_e); - printf("\n删除队头元素 %d \n遍历队列:", _e); - TraverseQueue(lk); - - GetHead(&lk, &_e); - _queueLen = QueueLength(&lk); - printf("\n*当前头节点为 %d ,队列长度为 %d \n", _e, _queueLen); - ClearQueue(&lk); - printf("\n清空队列...\n遍历队列:"); - TraverseQueue(lk); - DestroyQueue(&lk); - return 0; -} \ No newline at end of file diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BST.c" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BST.c" new file mode 100644 index 00000000..1580e568 --- /dev/null +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BST.c" @@ -0,0 +1,138 @@ +#include "BST.h" + +/* 查找表的初始化建立 */ +Status _CreateBST(BiTree *T, TElemType * c) { + int i; + for (i = 0; c[i] != -1; i++) { + InsertBST(T, c[i]); + } + return OK; +} + +/* 在T树中查找关键字key */ +Status SearchBST(BiTree T, TElemType key, BiTree f, BiTree * p) { + if (!T) { + *p = f; + return FALSE; + } + else if (key == T->data) { + *p = T; + return TRUE; + } + else if (key < (*T).data) { + return SearchBST((*T).lchild, key, T, p); + } + else { + return SearchBST((*T).rchild, key, T, p); + } +} + +/* c插入关键字key */ +Status InsertBST(BiTree *T, TElemType key) { + BiTree p, s; + if (!SearchBST(*T, key, NULL, &p)) { + s = (BiTree)malloc(sizeof(BiTNode)); + s->data = key; + s->lchild = NULL; + s->rchild = NULL; + s->parent = NULL; + if (!p) { + *T = s; + } + else if (key < p->data) { + p->lchild = s; + s->parent = p; + } + else { + p->rchild = s; + s->parent = p; + } + return TRUE; + } + else { + return FALSE; + } +} + +/*查找表的初始化建立和查找 */ +Status _Search(BiTree T, TElemType * a) { + //如果未找到则将当前关键字添加到当前查找表中,如果找到,则删除该关键字所在结点 + BiTree p, f = NULL; + int i; + for (i = 0; a[i] != -1; i++) { + if (SearchBST(T, a[i], f, &p)) { + Delete(p, f); + } + else { + InsertBST(&T, a[i]); + } + _print(T); + } + return OK; +} + +/* 先序遍历二叉树 */ +Status PreOrderTraverse(BiTree T, int i) { + if (T == NULL) { + return OK; + } + if (T) { + if (i == 0) { /* 访问结点*/ + printf("%d", T->data); + i++; + } + else + printf(", %d", T->data); + PreOrderTraverse(T->lchild, i); /* 遍历左子树*/ + PreOrderTraverse(T->rchild, i); /* 遍历右子树*/ + } + return 0; +} + +/* 删除一个结点 */ +Status Delete(BiTree p, BiTree f) { + BiTree q, s; + q = p; + if (!p->rchild) { + if (p->parent->rchild == p) { + p->parent->rchild = p->lchild; + } + else { + p->parent->lchild = p->lchild; + } + free(q); + } + else if (!p->lchild) { + if (p->parent->rchild == p) { + p->parent->rchild = p->rchild; + } + else { + p->parent->lchild = p->rchild; + } + free(q); + } + else { + s = p->lchild; + while (s->rchild) { + q = s; + s = s->rchild; + } + p->data = s->data; + if (q != p) { + q->rchild = s->lchild; + } + else { + q->lchild = s->lchild; + } + free(s); + } + return OK; +} + +/* 打印一遍查找表 */ +Status _print(BiTree T) { + static int i = 0; + PreOrderTraverse(T, i); + printf("\n"); + return OK; +} \ No newline at end of file diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BST.h" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BST.h" new file mode 100644 index 00000000..32756c6b --- /dev/null +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BST.h" @@ -0,0 +1,44 @@ +#ifndef BST_H +#define BST_H +#include +#include +#define TElemType int +#define KeyType int + +typedef struct BiTNode { + TElemType data; + struct BiTNode *lchild, *rchild, *parent; + +}BiTNode, *BiTree; +typedef enum { + FALSE, + TRUE +}bool; +typedef enum { + OK, + ERROR, + OVERFLOW +}Status; + +/* 查找表的初始化建立 */ +Status _CreateBST(BiTree *T, TElemType * c); + +/* 在T树中查找关键字key */ +Status SearchBST(BiTree T, TElemType key, BiTree f, BiTree * p); + +/* c插入关键字key */ +Status InsertBST(BiTree *T, TElemType key); + +/* 打印一遍查找表 */ +Status _print(BiTree T); + +/* 先序遍历二叉树 */ +Status PreOrderTraverse(BiTree T, int i); + +/* 删除一个结点 */ +Status Delete(BiTree p, BiTree f); + +/* 在查找表中查找 */ +Status _Search(BiTree T, TElemType * a); + +#endif // !1 diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BSTOutput.txt" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BSTOutput.txt" new file mode 100644 index 00000000..eea55310 --- /dev/null +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/BSTOutput.txt" @@ -0,0 +1,6 @@ +8, 3, 1, 6, 4, 5, 7, 10, 14, 19, 22, 30 +8, 3, 1, 6, 4, 5, 7, 10, 14, 13, 19, 22, 30 +7, 3, 1, 6, 4, 5, 10, 14, 13, 19, 22, 30 +7, 3, 1, 6, 4, 10, 14, 13, 19, 22, 30 +7, 3, 1, 6, 4, 10, 14, 13, 19, 22, 20, 30 +7, 3, 1, 4, 10, 14, 13, 19, 22, 20, 30 \ No newline at end of file diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_BST.c" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_BST.c" new file mode 100644 index 00000000..3c63f45d --- /dev/null +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_BST.c" @@ -0,0 +1,11 @@ +#include +#include "BST.h" +int main() { + BiTree T = NULL; + TElemType c[] = { 8, 10, 14, 3, 1, 6, 4, 7, 5, 19, 22, 30 ,-1 }, + s[] = { 13, 8, 5, 20, 6 ,-1 }; + _CreateBST(&T, c); + _print(T); + _Search(T, s); + return 0; +} \ No newline at end of file From 6814110b0107d7c0d1bf91edcc6a5732744b8236 Mon Sep 17 00:00:00 2001 From: Cloud0606 <827594950@qq.com> Date: Sat, 17 Jun 2017 20:48:07 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E8=AF=AF=E5=88=A0=E9=99=A4=E4=BA=86?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E9=98=9F=E5=88=97=E4=BD=9C=E4=B8=9A=E7=9A=84?= =?UTF-8?q?=E4=B8=BB=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main.c" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git "a/2017-1/Cloud/2.\346\240\210\345\222\214\351\230\237\345\210\227\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main.c" "b/2017-1/Cloud/2.\346\240\210\345\222\214\351\230\237\345\210\227\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main.c" index d82e7e20..d1a4ec5e 100644 --- "a/2017-1/Cloud/2.\346\240\210\345\222\214\351\230\237\345\210\227\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main.c" +++ "b/2017-1/Cloud/2.\346\240\210\345\222\214\351\230\237\345\210\227\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main.c" @@ -1,2 +1,36 @@ #include #include "Queue.h" +int main() { + int _queueLen; + QElemType _e; + LinkQueue lk; + printf("队列初始化...\n"); + InitQueue(&lk); + printf("遍历队列:"); + TraverseQueue(lk); + printf("\n插入新的元素 2\n遍历队列:"); + EnQueue(&lk, 2); + TraverseQueue(lk); + printf("\n插入新的元素 4\n遍历队列:"); + EnQueue(&lk, 4); + TraverseQueue(lk); + printf("\n插入新的元素 6\n遍历队列:"); + EnQueue(&lk, 6); + TraverseQueue(lk); + + GetHead(&lk, &_e); + _queueLen = QueueLength(&lk); + printf("\n*当前头节点为 %d ,队列长度为 %d \n", _e, _queueLen); + DeQueue(&lk, &_e); + printf("\n删除队头元素 %d \n遍历队列:", _e); + TraverseQueue(lk); + + GetHead(&lk, &_e); + _queueLen = QueueLength(&lk); + printf("\n*当前头节点为 %d ,队列长度为 %d \n", _e, _queueLen); + ClearQueue(&lk); + printf("\n清空队列...\n遍历队列:"); + TraverseQueue(lk); + DestroyQueue(&lk); + return 0; +} \ No newline at end of file From 64abb39cbb922370d9221eb383d5cce301fdeeb6 Mon Sep 17 00:00:00 2001 From: Cloud0606 <827594950@qq.com> Date: Sun, 18 Jun 2017 01:22:22 +0800 Subject: [PATCH 3/8] =?UTF-8?q?Hash=E6=9F=A5=E6=89=BE=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E5=BB=BA=E7=AB=8B=E3=80=81=E5=85=B3=E9=94=AE=E5=AD=97=E6=9F=A5?= =?UTF-8?q?=E6=89=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Hash.c" | 131 ++++++++++++++++++ .../Hash.h" | 53 +++++++ .../main_Hash.c" | 13 ++ 3 files changed, 197 insertions(+) create mode 100644 "2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.c" create mode 100644 "2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.h" create mode 100644 "2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.c" diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.c" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.c" new file mode 100644 index 00000000..32768298 --- /dev/null +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.c" @@ -0,0 +1,131 @@ +#include "Hash.h" + +/* 初始化哈希表 */ +void InitHashTable(HashTable *H) { + int i; + H->count = 0; + H->sizeindex = SizeIndex; + H->elem = (ElemType*)malloc(H->sizeindex * sizeof(ElemType)); + for (i = 0; i < H->sizeindex; i++) { + H->elem[i].key = NULLKEY; + H->elem[i].val = NULLKEY; + } +} + +/* 用随机生成的正整数序列填充Hash表 */ +void CreateHashTable(HashTable * H) { + int i; + ElemType e; + for (i = 0; i < H->sizeindex; i++) { + e.val = rand() % 1024; + e.key = e.val % SizeIndex; + InsertHash(H, e); + } + return; +} + +/* 查找for本题 */ +void _Search(HashTable T) { + int i, k, p = 0, c = 0; + for (i = 0; i < 5; i++) + { + k = (T.elem[i].key + 1 + rand()) % T.sizeindex; + if (SearchHash(T, k, &p, &c)) { + printf("关键字%d查找成功! 冲突次数%d\n", k, c); + } + else { + printf("关键字%d查找失败!\n", k); + } + } + +} + +/* 返回哈希地址 */ +int Hash(KeyType k) { + return k%SizeIndex; +} + +/* 解决哈希冲突 */ +void collision(int *p, int *c) { + *p = (*p + 1) % SizeIndex; + *c++; +} + +/* 哈希表的查找 */ +Status SearchHash(HashTable H, KeyType K, int *p, int *c) { + // 在开放定址哈希表H中查找关键码为K的记录 + // c用于记录冲突次数,初值置0 + *p = Hash(K); // 求得哈希地址 + while (H.elem[*p].key != NULLKEY && K != H.elem[*p].key) { + collision(p, c); // 求得下一探查地址 p + } + if (K == H.elem[*p].key) { // 查找成功,p返回待查数据元素位置 + return SUCCESS; + } + else { + return FAILED; // 查找不成功 + } +} + +/* 向哈希表中插入数据 */ +Status InsertHash(HashTable *H, ElemType e) { + // 查找不成功时插入数据元素e到开放地址哈希表H中,并返回OK + // 若冲突次数过大,则重建哈希表 + int p, c; + c = 0;//记录冲突次数 + if (SearchHash(*H, e.key, &p, &c) == SUCCESS) { + collision(&p, &c); // 表中已有与 e 有相同关键字的元素 + while ((*H).elem[p].key != NULLKEY && e.key != (*H).elem[p].key) { + collision(&p, &c); // 求得下一探查地址 p + } + H->elem[p].val = e.val; + H->elem[p].key = e.key; + ++H->count; + return DUPLICATE; + } + else if (c < H->sizeindex / 2) { + // 冲突次数 c 未达到上限,(阀值可调,此处仅为示例) + H->elem[p].val = e.val; + H->elem[p].key = e.key; + //++H->count; + return SUCCESS; + } + else { + // 重建哈希表,极端情况下可能哈希表“已满”。 + // 所以通常的重建过程都是先增大新哈希表的容量 + RecreateHashTable(H); + } + return SUCCESS; +} + +/* 重建哈希表 */ +void RecreateHashTable(HashTable *H) // 重建哈希表代码参考了csdn徐留根的发表 -【数据结构】哈希表 +{ + int i, count = (*H).count; + ElemType *p, *elem = (ElemType*)malloc(count * sizeof(ElemType)); + p = elem; + printf("重建哈希表\n"); + for (i = 0; i < (*H).sizeindex; i++) // 保存原有的数据到elem中 + if (((*H).elem + i)->key != NULLKEY) // 该单元有数据 + *(p++) = *((*H).elem + i); + (*H).count = 0; + (*H).sizeindex++; // 增大存储容量 + p = (ElemType*)realloc((*H).elem, (*H).sizeindex * sizeof(ElemType)); + if (!p) + exit(0); // 存储分配失败 + (*H).elem = p; + for (i = 0; i < (*H).sizeindex; i++) + (*H).elem[i].key = NULLKEY; // 未填记录的标志(初始化) + for (p = elem; p < elem + count; p++) // 将原有的数据按照新的表长插入到重建的哈希表中 + InsertHash(H, *p); +} + +/* 打印哈希表 */ +void PrintHashTable(HashTable H) { + int i = 0; + for (; i < H.sizeindex; i++) { + // {[元素所在Hash表中的索引位置] : 关键字->值} + printf("{[%d] : %d->%d}\n", i, H.elem[i].key, H.elem[i].val); + } + printf("\n"); +} diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.h" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.h" new file mode 100644 index 00000000..a9b70aea --- /dev/null +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.h" @@ -0,0 +1,53 @@ +#pragma once +#ifndef Hash_h +#define Hash_h +#include +#include +# +#include +#define SUCCESS 1 +#define FAILED 0 +#define DUPLICATE -1 +#define NULLKEY -1 +#define SizeIndex 17; // hash表的表长 + +typedef int KeyType; +typedef int ValueType; +typedef int Status; + +typedef struct _ElemType { + KeyType key; // 关键字 + ValueType val; // 值 +#ifdef CHAINED_HASH + struct _ElemType *next; +#endif +} ElemType; + +typedef struct { + ElemType *elem; + int count; // 当前数据元素个数 + int sizeindex; // hashsize[sizeindex]为当前容量 +} HashTable; + +/* 初始化哈希表 */ +void InitHashTable(HashTable *H); + +/* 用随机生成的正整数序列填充Hash表(for本题) */ +void CreateHashTable(HashTable * H); + +/* 查找函数(for本题) */ +void _Search(HashTable T); + +/* 哈希表的查找 */ +Status SearchHash(HashTable H, KeyType K, int * p, int *c); + +/* 向哈希表中插入数据 */ +Status InsertHash(HashTable *H, ElemType e); + +/* 重建哈希表 */ +void RecreateHashTable(HashTable *H); + + +/* 打印哈希表 */ +void PrintHashTable(HashTable H); +#endif // !1 \ No newline at end of file diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.c" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.c" new file mode 100644 index 00000000..2678f6a1 --- /dev/null +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.c" @@ -0,0 +1,13 @@ +#include +#include "Hash.h" +int main() { + srand(time(NULL)); + HashTable H; + InitHashTable(&H); + CreateHashTable(&H); + PrintHashTable(H); + _Search(H); + //RecreateHashTable(&H); + //PrintHashTable(H); + return 0; +} \ No newline at end of file From a390e69ce85f9ce4d649c90071efb16122206ebb Mon Sep 17 00:00:00 2001 From: Cloud0606 <827594950@qq.com> Date: Sun, 18 Jun 2017 16:14:41 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E9=87=8D=E5=BB=BA=E5=93=88=E5=B8=8C?= =?UTF-8?q?=E8=A1=A8=E3=80=81=E8=BE=93=E5=87=BA=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Hash.c" | 103 +++++++++++------- .../Hash.h" | 11 +- .../main_Hash.c" | 4 +- .../main_Hash.png" | Bin 0 -> 48974 bytes 4 files changed, 75 insertions(+), 43 deletions(-) create mode 100644 "2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.png" diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.c" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.c" index 32768298..1d64c91f 100644 --- "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.c" +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.c" @@ -18,7 +18,7 @@ void CreateHashTable(HashTable * H) { ElemType e; for (i = 0; i < H->sizeindex; i++) { e.val = rand() % 1024; - e.key = e.val % SizeIndex; + e.key = e.val % H->sizeindex; InsertHash(H, e); } return; @@ -26,40 +26,47 @@ void CreateHashTable(HashTable * H) { /* 查找for本题 */ void _Search(HashTable T) { - int i, k, p = 0, c = 0; + int i, p = 0, c = 0; + ElemType e; + printf("\n"); for (i = 0; i < 5; i++) { - k = (T.elem[i].key + 1 + rand()) % T.sizeindex; - if (SearchHash(T, k, &p, &c)) { - printf("关键字%d查找成功! 冲突次数%d\n", k, c); + e.val = (T.elem[i].key + 1 + rand())%1024; + e.key = e.val % T.sizeindex; + if (SearchHash(T, e, &p, &c)) { + printf("关键字%d查找成功! 冲突次数%d\n", e.key, c); } else { - printf("关键字%d查找失败!\n", k); + printf("关键字%d查找失败!\n", e.key); } } } /* 返回哈希地址 */ -int Hash(KeyType k) { - return k%SizeIndex; +int Hash(HashTable H,ValueType k) { + int p; + p = k%H.sizeindex; + return p; } /* 解决哈希冲突 */ -void collision(int *p, int *c) { - *p = (*p + 1) % SizeIndex; +void collision(HashTable H,int *p, int *c) { *c++; + *p = (*p + 1) % H.sizeindex; } /* 哈希表的查找 */ -Status SearchHash(HashTable H, KeyType K, int *p, int *c) { +Status SearchHash(HashTable H, ElemType e, int *p, int *c) { // 在开放定址哈希表H中查找关键码为K的记录 // c用于记录冲突次数,初值置0 - *p = Hash(K); // 求得哈希地址 - while (H.elem[*p].key != NULLKEY && K != H.elem[*p].key) { - collision(p, c); // 求得下一探查地址 p + *p = e.key; // 求得哈希地址 + while (H.elem[*p].key != NULLKEY && e.key != H.elem[*p].key) { + if(*p == H.sizeindex -1 ) + return FAILED; + collision(H,p, c); // 求得下一探查地址 p } - if (K == H.elem[*p].key) { // 查找成功,p返回待查数据元素位置 + if (e.key == H.elem[*p].key) { // 查找成功,p返回待查数据元素位置 return SUCCESS; } else { @@ -73,10 +80,10 @@ Status InsertHash(HashTable *H, ElemType e) { // 若冲突次数过大,则重建哈希表 int p, c; c = 0;//记录冲突次数 - if (SearchHash(*H, e.key, &p, &c) == SUCCESS) { - collision(&p, &c); // 表中已有与 e 有相同关键字的元素 - while ((*H).elem[p].key != NULLKEY && e.key != (*H).elem[p].key) { - collision(&p, &c); // 求得下一探查地址 p + if (SearchHash(*H, e, &p, &c) == SUCCESS) { + collision(*H,&p, &c); // 表中已有与 e 有 相同关键字的元素 + while ((*H).elem[p].key != NULLKEY /*&& e.key != (*H).elem[p].key*/) { + collision(*H,&p, &c); // 求得下一探查地址 p } H->elem[p].val = e.val; H->elem[p].key = e.key; @@ -85,9 +92,9 @@ Status InsertHash(HashTable *H, ElemType e) { } else if (c < H->sizeindex / 2) { // 冲突次数 c 未达到上限,(阀值可调,此处仅为示例) - H->elem[p].val = e.val; - H->elem[p].key = e.key; - //++H->count; + H->elem[e.key].val = e.val; + H->elem[e.key].key = e.key; + ++H->count; return SUCCESS; } else { @@ -101,31 +108,51 @@ Status InsertHash(HashTable *H, ElemType e) { /* 重建哈希表 */ void RecreateHashTable(HashTable *H) // 重建哈希表代码参考了csdn徐留根的发表 -【数据结构】哈希表 { - int i, count = (*H).count; - ElemType *p, *elem = (ElemType*)malloc(count * sizeof(ElemType)); + printf("\n重建哈希表:\n"); + int i, count = (*H).count,n = (*H).sizeindex; + ElemType *p , *elem = (ElemType*)malloc(count * sizeof(ElemType)); p = elem; - printf("重建哈希表\n"); - for (i = 0; i < (*H).sizeindex; i++) // 保存原有的数据到elem中 - if (((*H).elem + i)->key != NULLKEY) // 该单元有数据 - *(p++) = *((*H).elem + i); + (*H).count = 0; - (*H).sizeindex++; // 增大存储容量 - p = (ElemType*)realloc((*H).elem, (*H).sizeindex * sizeof(ElemType)); + for (i = 0; i < n; i++) { // 保存原有的数据到elem中 + if (((*H).elem + i)->key != NULLKEY) { // 该单元有数据 + *p++ = *((*H).elem + i); + /*p->val = ((*H).elem + i)->val; + p->key = Hash(*H, ((*H).elem + i)->val); + p++;*/ + } + } + + (*H).sizeindex += SizeIndex; + for (i = 0; i < n; i++) { + if (((*H).elem + i)->key != NULLKEY) { + p->val = ((*H).elem + i)->val; + p->key = Hash(*H, ((*H).elem + i)->val); + p++; + } + } + // 增大存储容量 + p = (ElemType*)malloc((*H).sizeindex * sizeof(ElemType)); if (!p) - exit(0); // 存储分配失败 - (*H).elem = p; - for (i = 0; i < (*H).sizeindex; i++) - (*H).elem[i].key = NULLKEY; // 未填记录的标志(初始化) - for (p = elem; p < elem + count; p++) // 将原有的数据按照新的表长插入到重建的哈希表中 + exit(1); // 存储分配失败 + (*H).elem = p; + for (i = 0; i < (*H).sizeindex; i++) { + (*H).elem[i].key = -1; // 初始化 + (*H).elem[i].val = -1; + } + for (p = elem; p < elem + count ; p++) // 将原有的数据按照新的表长插入到重建的哈希表中 InsertHash(H, *p); } /* 打印哈希表 */ -void PrintHashTable(HashTable H) { - int i = 0; +void PrintHashTable(HashTable H){ + int i = 0,j = 0; for (; i < H.sizeindex; i++) { // {[元素所在Hash表中的索引位置] : 关键字->值} - printf("{[%d] : %d->%d}\n", i, H.elem[i].key, H.elem[i].val); + printf("{[%d] : %d->%d} ", i, H.elem[i].key, H.elem[i].val); + j++; + if(j%3 == 0) + printf("\n"); } printf("\n"); } diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.h" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.h" index a9b70aea..5bbaca22 100644 --- "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.h" +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/Hash.h" @@ -9,7 +9,7 @@ #define FAILED 0 #define DUPLICATE -1 #define NULLKEY -1 -#define SizeIndex 17; // hash表的表长 +#define SizeIndex 7 // hash表的表长 typedef int KeyType; typedef int ValueType; @@ -38,8 +38,14 @@ void CreateHashTable(HashTable * H); /* 查找函数(for本题) */ void _Search(HashTable T); +/* 解决哈希冲突 */ +void collision(HashTable H, int *p, int *c); + +/* 返回哈希地址 */ +int Hash(HashTable H, ValueType k); + /* 哈希表的查找 */ -Status SearchHash(HashTable H, KeyType K, int * p, int *c); +Status SearchHash(HashTable H, ElemType e, int *p, int *c); /* 向哈希表中插入数据 */ Status InsertHash(HashTable *H, ElemType e); @@ -47,7 +53,6 @@ Status InsertHash(HashTable *H, ElemType e); /* 重建哈希表 */ void RecreateHashTable(HashTable *H); - /* 打印哈希表 */ void PrintHashTable(HashTable H); #endif // !1 \ No newline at end of file diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.c" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.c" index 2678f6a1..1c49555a 100644 --- "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.c" +++ "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.c" @@ -7,7 +7,7 @@ int main() { CreateHashTable(&H); PrintHashTable(H); _Search(H); - //RecreateHashTable(&H); - //PrintHashTable(H); + RecreateHashTable(&H); + PrintHashTable(H); return 0; } \ No newline at end of file diff --git "a/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.png" "b/2017-1/Cloud/5.\345\220\204\347\247\215\346\237\245\346\211\276\346\223\215\344\275\234/main_Hash.png" new file mode 100644 index 0000000000000000000000000000000000000000..a627b7e9f3697467c989c8a2f14f3d875371eb06 GIT binary patch literal 48974 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 literal 0 HcmV?d00001 From 7c7994aca4435b83905000abfd23ed64267c4b27 Mon Sep 17 00:00:00 2001 From: Cloud0606 <827594950@qq.com> Date: Sun, 18 Jun 2017 17:55:15 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=8B=86=E5=88=86=E9=93=BE=E8=A1=A8=20?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LinkList.c" | 67 +++++++++++++++++++ .../LinkList.h" | 30 +++++++++ .../main_LinkList.c" | 13 ++++ .../main_LinkList.txt" | 3 + 4 files changed, 113 insertions(+) create mode 100644 "2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.c" create mode 100644 "2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.h" create mode 100644 "2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main_LinkList.c" create mode 100644 "2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main_LinkList.txt" diff --git "a/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.c" "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.c" new file mode 100644 index 00000000..5f32eefb --- /dev/null +++ "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.c" @@ -0,0 +1,67 @@ +#include "LinkList.h" + +/* 链表的遍历 */ +void TraverseList(LinkList p) { + LinkList l = p; + l = l->next; + while ( l != p) { + printf("%d ",l->data); + l = l->next; + } + printf("\n"); +} + +/* 创建链表 */ +LinkList CreatList( int n) { + LNode *L,* p; + int i; + L = (LinkList)malloc(sizeof(LNode)); + L->next = L; + L->data = n; + if (!L) + exit(1); + for (i = 0; i < n ; i++) { + p = (LinkList)malloc(sizeof(LNode)); + if (!p) + exit(1); + p->data = i; + p->next = L->next; + L->next = p; + } + return L; +} + +/*初始化链表*/ +void InitList(LinkList a) { + LinkList p = a; + for (; p->next != a; p = p->next) { + p->data = 0; + + } +} + +/* 拆分链表 */ +void SeparateList(LinkList A, LinkList b, LinkList c) { + LinkList p = A,p1 = b,p2 = c; + InitList(b); + InitList(c); + p = p->next; + p1 = p1->next; + p2 = p2->next; + while ( p != A) { + p1->data = p->data; + b->data++; + p1 = p1->next; + p = p->next; + if (p != A) { + p2->data = p->data; + c->data++; + p2 = p2->next; + p = p->next; + } + } + return; +} + + + diff --git "a/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.h" "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.h" new file mode 100644 index 00000000..838452cd --- /dev/null +++ "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.h" @@ -0,0 +1,30 @@ +#pragma once +#ifndef LINKLIST_H +#define LINKLIST_H +#include +#include +#define length 10 + +typedef struct LNode { + int data; + struct LNode *next; +}LNode, *LinkList; + +typedef enum { + true, + false +}bool; + +/* 链表的遍历 */ +void TraverseList(LNode * p); + +/* 创建链表 */ +LinkList CreatList(int n); + +/* 拆分链表 */ +void SeparateList(LinkList A, LinkList b, LinkList c); + +/*初始化链表*/ +void InitList(LinkList); + +#endif \ No newline at end of file diff --git "a/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main_LinkList.c" "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main_LinkList.c" new file mode 100644 index 00000000..14387f01 --- /dev/null +++ "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main_LinkList.c" @@ -0,0 +1,13 @@ +#include +#include "LinkList.h" +#define length 20 +int main() { + LinkList A = CreatList(length), + a1 = CreatList(length/2), + a2 = CreatList(length/2); + TraverseList(A); + SeparateList(A, a1, a2); + TraverseList(a1); + TraverseList(a2); + return 0; +} \ No newline at end of file diff --git "a/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main_LinkList.txt" "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main_LinkList.txt" new file mode 100644 index 00000000..aaed159d --- /dev/null +++ "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/main_LinkList.txt" @@ -0,0 +1,3 @@ +19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +19 17 15 13 11 9 7 5 3 1 +18 16 14 12 10 8 6 4 2 0 From f3c373c98928140a8347d632fa762eea332a737d Mon Sep 17 00:00:00 2001 From: Cloud0606 <827594950@qq.com> Date: Mon, 19 Jun 2017 00:15:36 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E7=AC=AC10=E6=AC=A1=E4=BD=9C=E4=B8=9A=20?= =?UTF-8?q?=E6=89=80=E4=BB=A5=E5=BF=85=E9=80=89=E7=9A=84=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sort.c" | 142 ++++++++++++++++++ .../Sort.h" | 41 +++++ .../main_Sort.c" | 53 +++++++ .../main_Sort.txt" | 16 ++ 4 files changed, 252 insertions(+) create mode 100644 "2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/Sort.c" create mode 100644 "2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/Sort.h" create mode 100644 "2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.c" create mode 100644 "2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.txt" diff --git "a/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/Sort.c" "b/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/Sort.c" new file mode 100644 index 00000000..a0d08cc9 --- /dev/null +++ "b/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/Sort.c" @@ -0,0 +1,142 @@ +#include "Sort.h" + +/* 打印数组 */ +Status PrintArray(ElemeyType *a, int l, int move_count, int compare_count) { + int i; + for (i = 0; i < l; i++) { + printf("%d ", a[i + 1]); + } + if (a[0] == 1) + printf("\n该算法执行的 总比较次数为:%d 总移动记录次数为:%d 二者次数之和为:%d\n", + compare_count, move_count, compare_count + move_count); + else + printf("\n"); + return OK; +} + +/* 直接插入排序 */ +Status InsSort(ElemeyType *r, int length, int *move_count, int *compare_count) { + int i, j; + for (i = 2; i <= length; i++) { + *r = *(r + i); /* 将待插入记录存放到临时变量中 */ + j = i - 1; /* 最近一次排序结束的边界位置 */ + (*compare_count)++; + while (r[0] < r[j]) { /* 寻找插入位置 */ + (*move_count)++; + *(r + j + 1) = *(r + j);/* 从小到大排序,大元素右移 */ + j = j - 1; /* 待插入元素与已排序区下一个(左移一位)元素继续进行比较 */ + } + *(r + j + 1) = r[0]; /* 将待插入记录插入到已排序的序列中 */ + } + *r = 1; + return OK; +} + +/* 一趟希尔插入排序 */ +void ShellInsert(ElemeyType *r, int length, int delta, int *move_count, int *compare_count) { + //length为数组的长度, delta 为增量 + int i, j; + for (i = 1 + delta; i <= length; i++) { /* 1+delta为第一个子序列的第二个元素的下标 */ + (*compare_count)++; + if (r[i] < r[i - delta]) { + *r = r[i]; /* 备份r[i] (不做监视哨) */ + for (j = i - delta; j > 0 && r[0] < r[j]; j -= delta) { + (*compare_count)++; + *(r + j + delta) = r[j]; + (*move_count)++; + } + *(r + j + delta) = r[0]; + } + } +} + +/* 希尔排序 */ +void ShellSort(ElemeyType *r, int length, int *move_count, int *compare_count) { + //length为数组的长度 + int d = length / 2; + while (d >= 1) { + ShellInsert(r, length, d, move_count, compare_count); + d = d / 2; + } + *r = 1; +} + +/* 冒泡排序 */ +void BubbleSort(ElemeyType *r, int length, int *move_count, int *compare_count) { + //length为数组的长度 + int n = length, i, j, x; + bool change = TRUE; + for (i = 1; i <= n - 1 && change; ++i) { + change = FALSE; + for (j = 1; j <= n - i; ++j) { + (*compare_count)++; + if (r[j] > r[j + 1]) { + (*move_count)++; + x = r[j]; + *(r + j) = r[j + 1]; + *(r + j + 1) = x; + change = TRUE; + } + } + } + *r = 1; +} + +/* 快速排序 */ +void QKSort(ElemeyType *r, int low, int high, int *move_count, int *compare_count) { + int pivot; + if (low < high) { + pivot = QKPass(r, low, high, move_count, compare_count); + QKSort(r, low, pivot - 1, move_count, compare_count); + QKSort(r, pivot + 1, high, move_count, compare_count); + } + *r = 1; +} + +/* 一趟快速排序 */ +int QKPass(ElemeyType *r, int left, int right, int *move_count, int *compare_count) { + //对记录数组r 中的r[left]至r[right]部分进行一趟排序,并得到基准的位置,使得排序后的结果满足其之后(前) + //的记录的关键字均不小于(大于)于基准记录 + int x, low, high; + x = r[left]; /* 选择基准记录*/ + low = left; + high = right; + while (low < high) { + while (low < high && r[high] >= x) { /* high从右到左找小于x的记录 */ + (*compare_count)++; + high--; + } + *(r + low) = r[high]; /* 找到小于x.key的记录,则进行交换 */ + (*move_count)++; + while (low < high && r[low] < x) { /* low从左到右找不小于x的记录 */ + *(compare_count)++; + low++; + } + *(r + high) = r[low]; /* 找到不小于x的记录,则交换*/ + (*move_count)++; + } + + *(r + low) = x; /* 将基准记录保存到low=high的位置 */ + return low; /*返回基准记录的位置*/ +} + +/* 选择排序 */ +void SelectSort(ElemeyType *r, int length, int *move_count, int *compare_count) { + //length为数组的长度 + int n = length, i, k, j, x; + for (i = 1; i <= n - 1; ++i) { + k = i; + for (j = i + 1; j <= n; ++j) { + (*compare_count)++; + if (r[j] < r[k]) { + k = j; + } + } + if (k != i) { + (*move_count)++; + x = r[i]; + *(r + i) = r[k]; + *(r + k) = x; + } + } +} \ No newline at end of file diff --git "a/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/Sort.h" "b/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/Sort.h" new file mode 100644 index 00000000..4ef01518 --- /dev/null +++ "b/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/Sort.h" @@ -0,0 +1,41 @@ +#pragma once +#ifndef SORT_H +#define SORT_H +#include +#define ElemeyType int +#define len 5 +typedef enum { + OK, + ERROR, + OVERFLOW +}Status; + +typedef enum { + FALSE, + TRUE +}bool; +/* 打印数组 */ +Status PrintArray(ElemeyType *a, int l, int move_count, int compare_count); + +/* 直接插入排序 */ +Status InsSort(ElemeyType *r, int length, int *move_count, int *compare_count); + +/* 一趟希尔插入排序 */ +void ShellInsert(ElemeyType *r, int length, int delta, int *move_count, int *compare_count); + +/* 希尔排序 */ +void ShellSort(ElemeyType *r, int length, int *move_count, int *compare_count); + +/* 冒泡排序 */ +void BubbleSort(ElemeyType *r, int length, int *move_count, int *compare_count); + +/* 快速排序 */ +void QKSort(ElemeyType *r, int low, int high, int *move_count, int *compare_count); + +/* 一趟快速排序 */ +int QKPass(ElemeyType *r, int left, int right, int *move_count, int *compare_count); + +/* 选择排序 */ +void SelectSort(ElemeyType *r, int length, int *move_count, int *compare_count); + +#endif diff --git "a/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.c" "b/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.c" new file mode 100644 index 00000000..49a7d6b9 --- /dev/null +++ "b/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.c" @@ -0,0 +1,53 @@ +#include +#include +#include +#include "Sort.h" +int main() { + int a[20], b[20], i; + srand(time(NULL)); + for (i = 1; i < len + 1; i++) { + a[i] = rand() % 128; + b[i] = a[i]; + } + int cCount = 0, mCount = 0;//记录比较次数和移动次数 + PrintArray(a, len, mCount, cCount); + + printf("\n希尔排序: "); + ShellSort(a, len, &mCount, &cCount); + PrintArray(a, len, mCount, cCount); + + printf("\n直接插入排序: "); + for (i = 1; i < len + 1; i++) { + a[i] = b[i]; + } + cCount = 0; + mCount = 0; + InsSort(a, len, &mCount, &cCount); + PrintArray(a, len, mCount, cCount); + + printf("\n冒泡排序: "); + for (i = 1; i < len + 1; i++) { + a[i] = b[i]; + } + cCount = 0, mCount = 0; + BubbleSort(a, len, &mCount, &cCount); + PrintArray(a, len, mCount, cCount); + + printf("\n快速排序: "); + for (i = 1; i < len + 1; i++) { + a[i] = b[i]; + } + cCount = 0, mCount = 0; + QKSort(a, 1, len, &mCount, &cCount); + PrintArray(a, len, mCount, cCount); + + printf("\n选择排序: "); + for (i = 1; i < len + 1; i++) { + a[i] = b[i]; + } + cCount = 0, mCount = 0; + SelectSort(a, len, &mCount, &cCount); + PrintArray(a, len, mCount, cCount); + + return 0; +} \ No newline at end of file diff --git "a/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.txt" "b/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.txt" new file mode 100644 index 00000000..e4df38b4 --- /dev/null +++ "b/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.txt" @@ -0,0 +1,16 @@ +106 19 10 63 127 + +希尔排序: 10 19 63 106 127 +该算法执行的 总比较次数为:9 总移动记录次数为:2 二者次数之和为:11 + +直接插入排序: 10 19 63 106 127 +该算法执行的 总比较次数为:4 总移动记录次数为:4 二者次数之和为:8 + +冒泡排序: 10 19 63 106 127 +该算法执行的 总比较次数为:9 总移动记录次数为:4 二者次数之和为:13 + +快速排序: 10 19 63 106 127 +该算法执行的 总比较次数为:2 总移动记录次数为:6 二者次数之和为:8 + +选择排序: 10 19 63 106 127 +该算法执行的 总比较次数为:10 总移动记录次数为:2 二者次数之和为:12 From 00aebb01736ceaf65e506be3eee4ad8af6624e71 Mon Sep 17 00:00:00 2001 From: Cloud0606 <827594950@qq.com> Date: Tue, 20 Jun 2017 14:24:24 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AF=B9?= =?UTF-8?q?=E6=8B=86=E5=88=86=E9=93=BE=E8=A1=A8=E7=AE=97=E6=B3=95=E7=9A=84?= =?UTF-8?q?=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LinkList.c" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.c" "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.c" index 5f32eefb..6369443f 100644 --- "a/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.c" +++ "b/2017-1/Cloud/1.\347\272\277\346\200\247\350\241\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234/LinkList.c" @@ -42,6 +42,8 @@ void InitList(LinkList a) { /* 拆分链表 */ void SeparateList(LinkList A, LinkList b, LinkList c) { +//算法分析:算法的的时间复杂度为 O(n),空间复杂度为O(1), +//在保证算法的正确性的前提下,使用了最少的时间复杂度和最少的空间复杂度 LinkList p = A,p1 = b,p2 = c; InitList(b); InitList(c); From 29a5b9c2d7cfa767410fd4717e10eb288b17352b Mon Sep 17 00:00:00 2001 From: Cloud0606 <827594950@qq.com> Date: Tue, 20 Jun 2017 14:35:27 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A10=E7=9A=84=E6=B5=8B=E8=AF=95=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main_Sort.png" | Bin 0 -> 50801 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.png" diff --git "a/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.png" "b/2017-1/Cloud/6.\345\220\204\347\247\215\346\216\222\345\272\217\346\223\215\344\275\234/main_Sort.png" new file mode 100644 index 0000000000000000000000000000000000000000..0083515f1cd92efca0445951cfb919f324ecfee3 GIT binary patch literal 50801 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 l|6gjJ1^ge{yHpbr literal 0 HcmV?d00001