c语言实现简单排序(8种方法)
更新时间:2023-12-19 15:53:01 阅读量: 教育文库 文档下载
#include
voidbubleSort(int data[], int n); //快速排序
voidquickSort(int data[], int low, int high); intfindPos(int data[], int low, int high); //插入排序
voidbInsertSort(int data[], int n); //希尔排序
voidshellSort(int data[], int n); //选择排序
voidselectSort(int data[], int n); //堆排序
voidheapSort(int data[], int n); void swap(int data[], inti, int j);
voidheapAdjust(int data[], inti, int n); //归并排序
voidmergeSort(int data[], int first, int last); void merge(int data[], int low, int mid, int high); //基数排序
voidradixSort(int data[], int n); intgetNumPos(intnum, intpos);
int main() {
int data[10] = {43, 65, 4, 23, 6, 98, 2, 65, 7, 79}; inti;
printf(\原先数组:\for(i=0;i<10;i++) {
printf(\ }
printf(\
/*printf(\冒泡排序:\bubleSort(data, 10); for(i=0;i<10;i++) {
printf(\ }
printf(\
printf(\快速排序:\quickSort(data, 0, 9); for(i=0;i<10;i++) {
printf(\ }
printf(\
printf(\插入排序:\bInsertSort(data,10); for(i=0;i<10;i++) {
printf(\ }
printf(\
printf(\希尔排序:\shellSort(data, 10); for(i=0;i<10;i++) {
printf(\ }
printf(\
printf(\选择排序:\selectSort(data, 10); for(i=0;i<10;i++) {
printf(\ }
printf(\
int data[11] = {-1, 43, 65, 4, 23, 6, 98, 2, 65, 7, 79}; inti;
printf(\原先数组:\
int data[11] = {-1, 43, 65, 4, 23, 6, 98, 2, 65, 7, 79}; for(i=1;i<11;i++) {
printf(\ }
printf(\
printf(\堆排序:\heapSort(data, 10); for(i=1;i<11;i++) {
printf(\ }
printf(\
printf(\归并排序:\mergeSort(data, 0, 9); for(i=0;i<10;i++) {
printf(\ }
printf(\
printf(\基数排序:\radixSort(data, 10); for(i=0;i<10;i++) {
printf(\ }
printf(\
return 0; }
/*--------------------冒泡排序---------------------*/ voidbubleSort(int data[], int n) { inti,j,temp;
//两个for循环,每次取出一个元素跟数组的其他元素比较 //将最大的元素排到最后。 for(j=0;j //外循环一次,就排好一个数,并放在后面, //所以比较前面n-j-1个元素即可 for(i=0;i data[i] = data[i+1]; data[i+1] = temp; } } } } /*--------------------快速排序---------------------*/ intfindPos(int data[], int low, int high) { //将大于t的元素赶到t的左边,大于t的元素赶到t的右边 int t = data[low]; while(low < high) { while(low < high && data[high] >= t) { high--; } data[low] = data[high]; while(low < high && data[low] <=t) { low++; } data[high] = data[low]; } data[low] = t; //返回此时t在数组中的位置 return low; } //在数组中找一个元素,对大于该元素和小于该元素的两个数组进行再排序 //再对两个数组分为4个数组,再排序,直到最后每组只剩下一个元素为止 voidquickSort(int data[], int low, int high) { if(low > high) { return; } intpos = findPos(data, low, high); quickSort(data, low, pos-1); quickSort(data, pos+1, high); } /*--------------------插入排序---------------------*/ voidbInsertSort(int data[], int n) { intlow,high,mid; inttemp,i,j; for(i=1;i //把data[i]元素插入到它的前面data[0-(i-1)]中 temp =data[i]; high = i-1; //该while是折半,缩小data[i]的范围(优化手段) while(low <= high) { mid = (low+high)/2; if(data[mid] > temp) { high = mid-1; } else { low = mid+1; } } int j = i; //让data与已经排序好的数组的各个元素比较,小的放前面 while((j > low) && data[j-1] > temp) { data[j] = data[j-1]; --j; } data[low] = temp; } } /*--------------------希尔排序---------------------*/ voidshellSort(int * data, int n) { intstep,i,j,key; //将数组按照step分组,不断二分到每组只剩下一个元素 for(step=n/2;step>0;step/=2) { //将每组中的元素排序,小的在前 for(i=step;i for(j=i-step;j>=0 && key data[j+step] = data[j]; } //和上面的for循环一起,将组中小的元素换到数组的前面 data[j+step] = key; } } } /*--------------------选择排序---------------------*/ voidselectSort(int data[], int n) { inti,j,mix,temp; //每次循环数组,找出最小的元素,放在前面,前面的即为排序好的 for(i=0;i //假设最小元素的下标 int mix = i; //将上面假设的最小元素与数组比较,交换出最小的元素的下标 for(j=i+1;j if(data[j] < data[mix]) { mix = j; } } //若数组中真的有比假设的元素还小,就交换 if(i != mix) { temp = data[i]; data[i] = data[mix]; data[mix] = temp; } } } /*--------------------堆排序---------------------*/ //堆排序将数组先组成二叉树,默认从数组的data[1]开始排,data[0]是 //无效数据 voidheapSort(int data[], int n) { inti; //先将数组组成一棵完全二叉树 //从2/n开始,就是从倒数第二排结点往前开始 for(i=n/2;i>0;i--) { heapAdjust(data, i, n); } //循环每个结点,将大的结点交换到堆顶 for(i=n;i>1;i--) { swap(data, 1, i); //每次交换完都要调整二叉树,将剩下的最大的结点交换到堆顶
正在阅读:
c语言实现简单排序(8种方法)12-19
水利工程五大员试题及答案01-28
细胞生物学试题库及答案12-05
我爱秋天作文550字07-10
v一、建筑地基基础工程 - 图文03-15
译林英语5下5B U1-U4考点精练05-04
影像三基12-05
java面试题目05-02
比大小说课稿10-22
煤炭企业环境成本控制模型研究08-21
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 排序
- 语言
- 实现
- 简单
- 方法
- 平等权的宪法保护
- 2014春VB复习资料答案(2014-6-4)
- 《制作洋葱表皮细胞临时装片》教学设计
- 学前班配班老师学期个人工作总结
- 医患沟通培训测试
- 控制系统安装技术交底通知单- 控制系统
- 烟台市阅读融入学科教学现场会材料汇编 - 图文
- 2018-2019学年冀教版科学一年级上册教学计划
- 二级VISUAL+BASIC机试模拟8
- 同煤集团安全管理制度汇编
- 农村高中学生文明礼仪养成教育课题研究方案
- 初三科学总复习基础知识梳理
- 煤气系统年终工作总结
- 第四章 决策复习题
- 10、专业化销售流程概述.doc
- 信号与系统常用变换与知识点 - 图文
- 听证,让执行更透明调查报告
- 趣味减肥瑜伽球 轻松瘦全身
- 《学生第一》读书心得范文
- “中国现代文学”基础阅读书目