Test

来源:互联网 发布:mac自带词典词库下载 编辑:程序博客网 时间:2024/04/28 01:36
void Quick_Sort(int a[], int left, int right)</span>{int i = left, j = right;do{while (a[i]<a[left])i++;while (a[j]>a[left])j--;if (i<=j)std: swap(a[i++], a[j--]);} while (i<j);if(i<right)Quick_Sort(a, i, right);if(j>left)Quick_Sort(a, left, j);}

高端的桶排序


void BucketSort(int data[], int size)   {       int max, min, num, pos;       int i, j, k;       struct barrel *pBarrel;         max = min = data[0];       for (i = 1; i < size; i++) {           if (data[i] > max) {               max = data[i];           } else if (data[i] < min) {               min = data[i];           }       }       num = (max - min + 1) / 10 + 1;       pBarrel = (struct barrel*)malloc(sizeof(struct barrel) * num);       memset(pBarrel, 0, sizeof(struct barrel) * num);     /*将数据放到其对应的桶内*/    for (i = 0; i < size; i++) {           k = (data[i] - min + 1) / 10;        (pBarrel + k)->node[(pBarrel + k)->count] = data[i];           (pBarrel + k)->count++;       }              pos = 0;       for (i = 0; i < num; i++) {           quick_sort((pBarrel+i)->node, 0, (pBarrel+i)->count);//对每个桶中的元素排序          for (j = 0; j < (pBarrel+i)->count; j++) {               data[pos++] = (pBarrel+i)->node[j];           }       }       free(pBarrel);   }  



合并排序


void MergeSort(int array[], int left, int right){if(right <= left)return;int mid = (left+right)/2;int p1 = left, p2 = mid+1, i = left;int aux[10];MergeSort(array, left, mid);MergeSort(array, mid+1, right);//MergeArrayfor (int k = left; k <= right; k++)aux[k] = array[k];while (p1<=mid || p2<=right)if (p2>right || (p1<=mid && aux[p1]<=aux[p2]))array[i++] = aux[p1++];elsearray[i++] = aux[p2++];}






堆排序:

void CreateHeap(HeapList *H){char ch;int i;//下标从1开始好算ElemType temp;FILE *fp;if ( (fp=fopen("C:\\data.txt", "r")) == NULL){printf("文件无法被打开。!");exit(1);}while( fgetc(fp) ){fscanf(fp, "%d", &H->elem[ ++H->Size ]);if ( !(H->elem[H->Size]) ){H->elem[(H->Size)--] = 0;//结束时、删掉被赋值为'#'的那个结点break;}for (i=H->Size; H->elem[i] < H->elem[i/2]; i/=2){temp = H->elem[i];H->elem[i] = H->elem[i/2];H->elem[i/2] = temp;}}}

void Adjust(HeapList *H){ElemType LastElem, MinElem;int i, j;MinElem = H->elem[1];LastElem = H->elem[H->Size];for (i=1; 2*i <= H->Size; i=j){j = 2*i;//j指向 左右孩子中 小的那个if (j< H->Size && H->elem[j] > H->elem[j+1])j++;//如果LastElem(堆尾)大于较小的那个孩子、 则"此时的 MinElem"上移if (LastElem > H->elem[j]){H->elem[i] = H->elem[j];}else{break;}}H->elem[i] = LastElem;//堆尾放到剩下的那个空洞里H->elem[H->Size--] = MinElem;//堆顶放在 原堆顶的位置、并剪枝}




void Selection_Sort(int array[],int n){for (int i = 0; i < n-1; i++){for (int j = i+1; j < n; j++){if (array[i]>array[j]){std:swap(array[i], array[j]);}}}}




void Shell_Sort(int array[],int n){    int m = n;    int x,i,j;    int temp;    while(1)    {        m = m / 2;        for(x = 0;x < m;x++)        {            for(i = x+m;i < n;i = i+m)            {                temp = array[i];                for(j = i-m;j >= 0 && array[j] > temp;j = j-m)                {                    array[j+m] = array[j];                }                array[j+m] = temp;            }        }        if(m == 1)        {            break;        }    }}


void Binary_Insertion_Sort(int array[],int n){    int i,j;    int temp;    int left,right,middle;    for(i = 0;i < n;i++)    {        temp = array[i];        left = 0,right = i-1,middle = 0;        while(left <= right)        {            middle = (left + right)/2;            if(temp < array[middle])            {                right = middle-1;            }            else            {                left = middle+1;            }        }        for (j = i-1;j >= left;j–)         {            array[j+1] = array[j];        }        if(left != i)        {            array[left] = temp;        }    }}



void Insertion_Sort(int array[],int first,int last){    int i,j,temp;    for(i = first+1;i < last;i++)    {        temp = array[i];        for(j = i-1; (j>=0)&&(array[j]>temp); j--)        {            array[j+1] = array[j];        }        if(j != i-1)        {            array[j+1] = temp;        }    }}




内容
void Bubble_Sort(int array[],int n){    int i,j,temp;    for(i = 0;i < n-1; i++)    {        for(j = 0;j < n-1-i; j++)        {            if(array[j] > array[j+1])            {                temp = array[j];                array[j] = array[j+1];                array[j+1] = temp;            }        }    }}

0 0