希尔排序源代码如下:
#include <stdio.h> //希尔排序 void shellSort(int a[],int l, int r){ //一次排序同一步长所组成的集合 如a[0],a[5],a[10]... int i,j,h; for(h=1;h<=(r-1)/9;h=3*h+1); //设置步长为1,4,13,40,121,...序列 for( ; h>0;h/=3) for(i=h;i<=r;i++){ int j = i;int v = a[i]; while(j>=h && v<a[j-h]){ a[j] = a[j-h];j-=h; } a[j] = v; } } main(){ int b[16] = {10,7,12,25,8,9,11,71,82,90,1,14,99,7,456,1}; int length = sizeof(b)/sizeof(b[0]); shellSort(b,0,length-1); int i; for(i=0;i<length;i++) printf("%d ",b[i]); }
快速排序原代码如下:
#include <stdio.h> //int a[16] = {10,7,12,25,8,9,11,71,82,90,1,14,99,7,456,1}; //快速排序子程序 int findPivot(int a[],int i,int j){ int firstKey = a[i]; int k; for(k=i+1;k<=j;k++) if(a[k]>firstKey) return k; else if(a[k]<firstKey) return i; return -1; } //快速排序子程序 int partition(int a[],int i,int j,int pivot) { int l,r; do{ for(l = i;a[l]<pivot;l++); for(r = j;a[r]>=pivot;r--); if(l < r){ int t = a[l]; a[l]=a[r];a[r]=t; } }while(l<=r); return l; } //快速排序主程序 void quickSort(int a[],int i,int j){ int pivot; //划分的基准; int k ; //关键字大于等于pivot的记录在序列中的起始下标 int pivotIndex; pivotIndex = findPivot(a,i,j); if(pivotIndex!=-1){ //递归终止条件 pivot = a[pivotIndex]; k = partition(a,i,j,pivot) ; quickSort(a,i,k-1); quickSort(a,k,j); } } //-----------------以上是快速排序的一种实现-------------------// //快速排序 改进版 void quick_sort(int s[], int l, int r) { if (l < r) { int i = l, j = r, x = s[l]; while (i < j) { while(i < j && s[j] >= x) j--; if(i < j) s[i++] = s[j]; while(i < j && s[i] < x) i++; if(i < j) s[j--] = s[i]; } s[i] = x; quick_sort(s, l, i - 1); quick_sort(s, i + 1, r); } } main(){ int b[16] = {10,7,12,25,8,9,11,71,82,90,1,14,99,7,456,1}; int length = sizeof(b)/sizeof(b[0]); quickSort(b,0,length-1); int i; for(i=0;i<length;i++) printf("%d ",b[i]); }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-29 04:14:43