数据结构中的排序——C语言实现排序源代码
2013-07-24 21:18
253 查看
#include<stdio.h> #include<stdlib.h> void Print(int a[], int n); void Swap (int *a, int *b); int main() { int a[20] = {21,23,53,32,54,30,65,43,13,35,24,95,65,67,45,87,37,22,100,64}; Print(a, 20); BubbleSort(a, 20); InsertSort1(a, 20); SimpleSelectSort(a,20); ShellSort(a, 20); QuickSort(a, 20); printf("\n排序结果:\n"); Print(a, 20); return 0; } void Print(int a[], int n)//数组输出函数。便于调试 { for(int i = 0; i < n; i++) printf("%4d", a[i]); } void Swap (int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; }
冒泡排序:
/************************冒泡排序法***********************/ void BubbleSort(int a[],int n) { for(int i = 0; i < n; i++) for(int j = 1; j < n - i ; j++) { if(a[j] > a[j-1]) Swap(&a[j], &a[j-1]); } }
简单选择排序:
/***************简单选择排序******************************/ void SimpleSelectSort(int a[],int n) { int min; for(int i = 0; i < n; i++) { min = i; for(int j = i + 1 ; j < n; j++) { if(a[j] > a[min]) min = j; } if(min != i) Swap(&a[min], &a[i]); } }
直接插入排序:
void InsertSort1(int a[], int n) { int i, j; for( i = 1; i < n; ++i) { for(j = i-1; j >= 0; --j) { if(a[j] < a[i]) break; } if(j != i - 1) { int temp = a[i]; for(int k = i-1;k > j; --k) a[k+1] = a[k]; a[k+1] = temp; } } }
希尔排序:
void ShellSort(int a[], int n) { int i, j, step; for(step = n/2; step > 0; step/=2) { for(i = 0; i < step; i++) { for(j = i+step; j < n; j += step) { if(a[j] < a[j-step]) { int temp = a[j]; int k = j - step; while( k >= 0 && a[k] > temp) { a[k + step] = a[k]; k = k - step; } a[k + step] = temp; } } } } }
归并排序:
/*******************归并排序开始*************************/ void MergeSort(int a[], int n) { int *b = (int*)malloc(sizeof(int)); MergeSortAssist(a, b, 0, n-1); for(int i = 0; i < n; i++) a[i] = b[i]; free(b); } void MergeSortAssist(int a[], int b[], int first,int last) { while(first < last) { int mid = (last + first)/2; MergeSortAssist(a, b, first, mid); MergeSortAssist(a, b, mid + 1, last); MergeSortMsort(a, b, first, mid, last); } } void MergeSortMsort(int a[], int b[], int first, int mid, int last) { int i = first; int j = mid + 1; int k = 0; while( i <= mid && j <= last) { if(a[i] <= a[j]) b[k++] = a[i++]; else b[k++] = a[j++]; } while( j<= last) b[k++] = a[j++]; while( i <= mid) b[k++] = a[i++]; for(int l = first; l < k; l++) a[first + l] = b[l]; } /*****************归并排序结束*********************/
快速排序:
/*******************快速排序开始***********************/ void QuickSort(int a[], int n) { Qsort(a, 0, n-1); } void Qsort(int a[], int low, int high) { int pivot; if( low < high) { pivot = Partition(a, low, high); Qsort(a, low, pivot-1); Qsort(a, pivot + 1, high); } } int Partition(int a[], int low, int high) { int i = low, j = high; int temp = a[low]; while(i < j) { while(i < j && a[j] >= temp) j--; if(i < j) { a[i] = a[j]; i++; } while(i < j && a[i] < temp) i++; if(i < j) { a[j] = a[i]; j--; } } a[i] = temp; return i; } /*******************快速排序结束*************************/
参考: 1 大话数据结构
2 http://blog.csdn.net/column/details/algorithm-easyword.html
相关文章推荐
- 快速排序的C语言实现【严蔚敏--数据结构】
- C语言-数据结构-选择排序-源代码
- c语言实现数据结构顺序表源代码
- 数据结构中栈的实现+栈的C语言实现源代码
- 数据结构 c语言设计队列 实现桶式排序和基数排序 测试性能
- (数据结构排序的实验四)快速,冒泡,简单选择,直接插入排序的c语言实现!!
- 数据结构 C语言实现选择排序
- EKAlgorithms-常用数据结构Objective-C语言实现一数组排序
- 数据结构-数组排序-二路归并-循环实现-C语言
- c语言实现数据结构中的链表源代码
- 数据结构中的排序查找算法(C语言实现)
- 数据结构 查找及排序算法、直接插入排序及顺序查找(c语言实现)
- 数据结构中单链表的实现+单链表的C语言实现源代码
- java数据结构排序之希尔排序实现
- 排序(4)---------希尔(shell)排序(C语言实现)
- C语言实现数据结构之哈希表
- C语言实现八种基本排序(三)
- 算法与数据结构【四】——C语言实现循环队列
- 数据结构-顺序栈-C语言实现
- 数据结构排序复习 OC实现