希尔排序 快速排序 堆排序的实现
2015-12-23 14:20
363 查看
#include<stdio.h> void insert_sort(int * array , int start , int step , int len) ; void show_sort(int *array ,int len) ; void shell_sort(int *array , int len ); void quite_sort(int * array ,int len ) ; int sort(int *array , int start , int end ) ; void dgsort(int * array , int start , int end) ; void heap_sort(int * array , int len) ; void big_sort(int * array , int atart ,int len ) ; void big_sort(int * d, int s , int len) { int left , right ; int max ,t ; // printf("s = %d \n" , s) ; while( s <= (len/2-1) ) { left = 2*s +1 ; right = 2*(s+1) ; if(right < len) max = d[left]>d[right] ? left : right ; else max = left ; if(d[max] >= d[s]) { t = d[max] ; d[max] = d[s] ; d[s] = t ; s = max ; } else s = len ; } // show_sort(d,len) ; } void heap_sort(int *d , int len ) { int i , cou , t ; for( i = len/2-1; i>=0 ;i--) big_sort(d , i ,len); cou = len-1 ; t = d[0] ; d[0] = d[cou] ; d[len-1] = t ; while(cou > 0) { big_sort(d , 0 , cou) ; t = d[cou-1] ; d[cou-1] = d[0] ; d[0] = t ; cou-- ; } show_sort(d,len) ; } void dgsort(int * array , int s , int e ) { int m ; if(s < e ) { m = sort(array , s , e) ; dgsort(array ,s,m) ; dgsort(array ,m+1 ,e) ; } } int sort(int *d , int s , int e) { int i , j , t ; i = s ; j =e-1; t = d[s] ; while(i<j) { while(i<j && d[j] >= t) j-- ; if(i<j) d[i++] = d[j] ; while(i<j && d[i] <t) i++ ; if(i < j) d[j--] = d[i] ; } d[i] = t ; return i ; } void quite_sort(int *d , int len ) { dgsort(d,0,len) ; show_sort(d,len) ; } void shell_sort(int * d , int len ) { int step = len/2 , start ; int i ,j ; while(step) { for(i = 0 ; i< step ; i++) insert_sort(d ,i ,step , len ) ; step/=2 ; } show_sort(d ,len) ; } //void swap_sort(int *d ,int len ) //{ // int i , j , t , no = 1 ; // // for( i =0 ; i < len-2&&no ; i++) // for( j=0 , no =0 ; j <len-1 ; j++ ) // if(d[j] >d[j+1]) // { // t = d[j] ; // d[j] = d[j+1] ; // d[j+1] = t ; // no = 1 ; // } // show_sort(d , len) ; //} //void select_sort(int *d , int l) //{ // int i , j , t , c ; // // for( i =0 ; i < l-1 ; i++ ) // { // t = i ; // for(j = i + 1 ; j< l; j++) // if(d[t] > d[j]) // t = j ; // if(t != i ) // { // c = d[t] ; // d[t] = d[i] ; // d[i] = c ; // } // } // show_sort(d , l) ; //} void show_sort(int * d , int len ) { int i = 0 ; for( i = 0 ; i < len ; i++) printf("%d " ,d[i]) ; printf("\n") ; } void insert_sort(int *d , int start , int step , int len ) { int i ,j ,t; for( i = start;i < len ; i+=step) { t = d[i] ; for( j = i-step ; j>=0&&t<d[j] ;j-=step) d[j+step] = d[j] ; d[j+step] = t ; } } int main() { int len,array[20]; //int array[10] = {7 , 4 , 5,1 , 3 , 9, 0, 8,6,7 } ; printf("请输入要进行排序的个数:"); scanf("%d",&len); printf("\n"); printf("请输入各个数字:\n"); for(int i=0;i<len;i++) scanf("%d",&array[i]); //insert_sort(array , 0 , 1 , 10 ) ; //select_sort(array , 10 ) ; //swap_sort(array , 10 ) ; printf("\n"); printf("希尔排序的序列为:\n"); shell_sort(array , len ); printf("\n"); printf("快速排序的序列为:\n"); quite_sort(array , len); printf("\n"); printf("堆排序的序列为:\n"); heap_sort(array , len); return 0; }
相关文章推荐
- 如何在xcode中手动添加.pch文件
- HttpClient&HttpURLConnection
- oracle12c安装详细图解
- ubuntu安装jdk
- 三目运算与ifelse
- Android一些总结
- Generator 函数的含义与用法
- 例题8-5 UVA 11054 Gergovia的酒交易
- iOS 图片简单处理方法
- js获取项目根路径
- Java中系统属性Properties介绍 System.getProperty()参数大全
- mongodb数据备份与恢复
- phpstorm修改html模板
- apache 加载 php7
- web前端 跨域问题
- C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码
- bzoj3611: [Heoi2014]大工程
- 为什么有些大公司技术弱爆了?
- 查看签名文件信息
- js实现正则匹配中文标点符号的方法