c语言 自动排序,c语言实现简单排序(8种方法)

《c语言实现简单排序(8种方法)》由会员分享,可在线阅读,更多相关《c语言实现简单排序(8种方法)(9页珍藏版)》请在人人文库网上搜索。

1、include#include/冒泡排序void bubleSort(int data, int n);/快速排序void quickSort(int data, int low, int high);int findPos(int data, int low, int high);/插入排序void bInsertSort(int data, int n);/希尔排序void shellSort(int data, int n);/选择排序void selectSort(int data, int n);/堆排序void heapSort(int data, int n);void swap。

2、(int data, int i, int j);void heapAdjust(int data, int i, int n);/归并排序void mergeSort(int data, int first, int last);void merge(int data, int low, int mid, int high);/基数排序void radixSort(int data, int n);int getNumPos(int num, int pos);int main() int data10 = 43, 65, 4, 23, 6, 98, 2, 65, 7, 79;int i;p。

3、rintf(原先数组:);for(i=0;idatai+1) temp = datai;datai = datai+1;datai+1 = temp; /*-快速排序-*/int findPos(int data, int low, int high) /将大于t的元素赶到t的左边,大于t的元素赶到t的右边int t = datalow;while(low = t) high-;datalow = datahigh;while(low high) return;int pos = findPos(data, low, high);quickSort(data, low, pos-1);quic。

4、kSort(data, pos+1, high); /*-插入排序-*/void bInsertSort(int data, int n) int low,high,mid;int temp,i,j;for(i=1;i temp) high = mid-1;else low = mid+1;int j = i;/让data与已经排序好的数组的各个元素比较,小的放前面while(j low) & dataj-1 temp) dataj = dataj-1;-j;datalow = temp;/*-希尔排序-*/void shellSort(int * data, int n) int step,。

5、i,j,key;/将数组按照step分组,不断二分到每组只剩下一个元素for(step=n/2;step0;step/=2) /将每组中的元素排序,小的在前for(i=step;i=0 & key0;i-) heapAdjust(data, i, n);/循环每个结点,将大的结点交换到堆顶for(i=n;i1;i-) swap(data, 1, i);/每次交换完都要调整二叉树,将剩下的最大的结点交换到堆顶heapAdjust(data, 1, i-1);/交换函数void swap(int data, int i, int j) int temp;temp = datai;datai = d。

6、ataj;dataj = temp;void heapAdjust(int data, int i, int n) int j, temp;/假设第一个结点的元素是最大的temp = datai;/i结点:2*i是i结点的左结点,2*i+1是i结点的右结点/把结点元素大的交换到前面for(j=2*i;j= dataj) break;datai = dataj;i = j;datai = temp;/*-归并排序-*/void mergeSort(int data, int first, int last) int mid = 0;/将数组不停的二分分组再组合,直到每组只剩一个元素if(firs。

7、t last) mid = (first+last)/2;mergeSort(data, first, mid);mergeSort(data, mid+1, last);merge(data, first, mid, last);return;void merge(int data, int low, int mid, int high) int i, k;/定义一个临时数组存放传进来的无序数组排好序之后的数组int *temp = (int *)malloc(high-low+1)*sizeof(int);/将无序数组分成两个序列int left_low = low;int left_hi。

8、gh = mid;int right_low = mid+1;int right_high = high;/将两个序列比较排序,小的排前for(k=0;left_low=left_high & right_low=right_high;k+) if(dataleft_low=dataright_low) tempk = dataleft_low+;elsetempk = dataright_low+;/左序列如果有剩下元素未排序,加到临时数组的末尾if(left_low = left_high) for(i=left_low;i=left_high;i+) tempk+ = datai;/右序。

9、列如果有剩下元素未排序,加到临时数组的末尾if(right_low = right_high) for(i=right_low;i=right_high;i+) tempk+ = datai;/将排好序的小分组转移到原数组中for(i=0;ihigh-low+1;i+) datalow+i = tempi;free(temp);return;/*-基数排序-*/该函数的作用是找出num的pos位数的数字(比如:23的个位数数字是3)int getNumPos(int num, int pos) int i;int temp = 1;for(i=0;ipos-1;i+) temp *= 10;r。

10、eturn (num / temp) % 10;void radixSort(int data, int n) int i,j,k,pos,num,index;/这几句话是创建一个从0-9(行) (n+1)(列)的网格,第一列从上往下是0-9,/第二列是该行包含的元素个数,默认为0个int *radixArrays10;for(i=0;i10;i+) radixArraysi = (int *)malloc(sizeof(int) * (n+1);radixArraysi0 = 0;/pos最大为31为数,计算机能承受的最大范围了for(pos=1;pos=31;pos+) /该for循环是将数组的元素按照位数(pos)的值放进网格内for(i=0;in;i+) num = getNumPos(datai, pos);index = +radixArraysnum0;radixArraysnumindex = datai;/该for循环是将上面的for循环已经按照某个位数(pos)排列好的元素存入数组for(i=0,j=0;i10;i+) for(k=1;k=radixArraysi0;k+) dataj+ = radixArraysik;/清空网格,以便给下个位数排列radixArraysi0 = 0;以上排序算法的优劣(时间复杂度和空间复杂度对比。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值