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