您的位置:首页 > 其它

几个重要的内部排序

2013-06-09 17:28 92 查看
void BubbleSort(int a[], int len)
{
int i, j;

for (i = 0;i < len; i ++)//sort counts
{
for (j = len - 1;j >= i; j --)
{
if (a[j] < a[j-1])
{
int tmp = a[j];
a[j] = a[j-1];
a[j-1] = tmp;
}
}
}
}

/*---------------SelectSort------------------*/
int SelectMinKey(int a[] , int index, int len)
{
int i, k, min = 0;

min = a[index];
k = index;

for (i = index + 1; i < len; i ++)
{
if (a[i] < min)
{
min = a[i];
k = i;
}
}

return k;
}

void SelectSort(int a[], int len)
{
int i, j;
for (i = 0; i < len; i ++)
{
j = SelectMinKey(a, i, len);

if (i != j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}

/*-----------------quick sort------------------*/
void _qsort(int a[], int low, int high)
{
int i = low, j = high, tmp = 0;
int key = a[low];

if (low < high)
{
while (i < j)
{
while ((i < j) && (key <= a[j]))
{
--j;
}

//find one
a[i] = a[j];

while ((i < j) && (key >= a[i]))
{
++i;
}

a[j] = a[i];
}

//record key location
a[i] = key;

_qsort(a, low, i - 1);
_qsort(a, j + 1, high);
}
}

void QuickSort(int a[], int len)
{
_qsort(a, 0, len - 1);
}

/*---------------Insertsort-----------------*/
void InsertSort(int a[], int len)
{
int i, j, tmp;
for (i = 1;i < len; i ++)
{
tmp = a[i];/* value to be sorted */

if (a[i] < a[i-1])
{
j = i - 1;

while ((j >= 0) && (tmp < a[j]))
{
a[j+1] = a[j];/* move the sorted array */
j --;
}

a[j+1] = tmp;  /* insert the value into sorted array */
}
}
}

/*----------------Shellsort-----------------*/
void ShellSort(int a[], int len)
{
int i = 0, j = 0;
int step = len;

do
{
step = (step / 3) + 1;

for (i = step; i < len; i += step)
{
if (a[i] < a[i-step])
{
int tmp = a[i];
j = i - step;

while ((j >= 0) && (tmp < a[j]))
{
a[j+step] = a[j];
j -= step;
}

a[j+step] = tmp;
}
}

}
while (step > 1);

}

void MergeSort(int a[], int len)
{
//TO DO.
}

void heapSort(int a[], int len)
{
//TO DO.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: