Test

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);

	//MergeArray
	for (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++];	else	array[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;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值