数据结构——基本排序汇总
2013-11-02 22:02
435 查看
#include <stdio.h> #define N 100 void print1(int a[], int len) { int i; for(i = 0; i < len; i++) { printf("%d ", a[i]); } printf("\n"); } void print2(int a[], int len) { int i; for(i = 1; i <= len; i++) { printf("%d ", a[i]); } printf("\n"); } int Swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; return 0; } int InsertSort(int a[], int len) { int i, j; for(i = 1; i < len; i++) { for(j = i - 1; j >= 0; j--) { if(a[j] > a[j + 1]) { Swap(&a[j], &a[j + 1]); } } } return 0; } int ShellSort(int a[], int len) { int i, j, dt; for(dt = len / 2; dt > 0; dt = dt / 2) { for(i = dt; i < len; i++) { for(j = i - dt; j >= 0; j -= dt) { if(a[j] > a[j + dt]) { Swap(&a[j], &a[j + dt]); } } } } return 0; } int SelectSort(int a[], int len) { int i, j, min; for(i = 0; i < len; i++) { min = i; for(j = i + 1; j < len; j++) { if(a[min] > a[j]) { min = j; } } Swap(&a[min], &a[i]); } return 0; } int HeapModify(int a[], int i, int len) { int temp = i; int lchild = 2 * i; int rchild = 2 * i + 1; if(a[lchild] > a[temp] && lchild < len) { temp = lchild; } if(a[rchild] > a[temp] && rchild < len) { temp = rchild; } if(temp != i) { Swap(&a[temp], &a[i]); HeapModify(a, temp, len); } return 0; } int HeapSort(int a[], int len) { int i; for(i = len / 2 - 1; i >= 0; i--) { HeapModify(a, i, len); } for(i = len - 1; i > 0; i--) { Swap(&a[0], &a[i]); HeapModify(a, 0, i); printf("中间过程:"); print1(a, len); } return 0; } int partition(int a[], int low, int high) { int privot = a[low]; while(low < high) { while(low < high && a[high] > privot) { high--; } if(low < high) { a[low++] = a[high]; } while(low < high && a[low] < privot) { low++; } if(low < high) { a[high--] = a[low]; } } a[low] = privot; return low; } int QuickSort(int a[], int low, int high) { int privot; if(low < high) { privot = partition(a, low, high); QuickSort(a, low, privot - 1); QuickSort(a, privot + 1, high); } return 0; } void main() { int a ;; int i; int len; printf("请输入需要排序的数字个数:\n"); scanf("%d", &len); printf("请输入排序的数值:\n"); for(i = 0; i < len; i++) { scanf("%d", &a[i]); } printf("排序开始:\n"); printf("before:"); print1(a, len); // InsertSort(a, num); // ShellSort(a, num); // SelectSort(a, num); // HeapSort(a, len); QuickSort(a, 0, len - 1); printf("排序完成:\n"); printf("after:"); print1(a, len); }
相关文章推荐
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
- 数据结构中树的基本定义相关概念汇总
- 【数据结构之排序1】排序的基本概念
- 数据结构中排序方法基本概念 及 分类
- 【数据结构基础】二叉搜索(排序)树的基本操作
- 数据结构之内部排序--排序的基本概念
- 数据结构——排序/搜索二叉树(非递归)的基本操作实现
- 【数据结构与算法】【排序】基本概念
- 数据结构实验之排序三:bucket sort
- 数据结构—单链表的部分基本操作(C语言)
- 数据结构与算法汇总
- 数据结构实验之排序七:选课名单
- 数据结构与算法之二分法插入排序
- 数据结构实验之排序七:选课名单
- 数据结构实验之排序四:寻找大富翁
- 数据结构(五)树2:树的基本操作
- c语言实现单链表数据结构及其基本操作
- 数据结构-单链表的基本操作
- 数据结构中常用排序
- 数据结构之排序再学习