内部排序
来源:互联网 发布:红手指软件原理 编辑:程序博客网 时间:2024/05/04 16:40
//插入排序
void InsertSort(int* data, int length)
{
for(int i=1;i<length;i++)
{
int tmp = data[i];
int j = i-1;
while(j>=0 &&tmp<data[j])
{
data[j+1] = data[j];
j--;
}
data[j+1] = tmp;
}
}
//选择排序
void SelectSort(int* data,int length)
{
int i;
int j;
int k;
for(i=0;i<length-1;i++)
{
k = i;
for(j=i+1;j<length;j++)
{
if(data[k] > data[j])
{
k = j;
}
}
int tmp = data[k];
data[k] = data[i];
data[i] = tmp;
}
}
//2分排序
void BInsertSort(int* data,int length)
{
for(int i=1;i<=length-1;i++)
{
int low = 0;
int high = i-1;
int tmp = data[i];
while(low <= high)
{
int mid = (low+high)/2;
if(data[mid] >tmp)
high = mid -1;
else
low = mid+1;
}
for(int j=i-1;j>=high+1;j--)
data[j+1] = data[j];
data[j+1] = tmp;
}
}
//冒泡排序
void BubbleSort(int* data,int length)
{
int tmp;
for(int i=0;i<length;i++)
{
for(int j=length-1;j>=i+1;j--)
{
if(data[j] < data[j-1])
{
tmp = data[j-1];
data[j-1] = data[j];
data[j] = tmp;
}
}
}
}
//快速排序
void QuickSort(int* data,int Start, int End)
{
int low = Start;
int high = End;
if(low < high)
{
int tmp = data[low];
while(low != high)
{
while(low < high && data[high] > tmp)
high--;
if(low < high)
{
data[low] = data[high];
low++;
}
while(low < high && data[low] < tmp)
low++;
if(low < high)
{
data[high] = data[low];
high++;
}
}
data[low] = tmp;
QuickSort(data,Start,low-1);
QuickSort(data,low+1,End);
}
}
//希尔排序
void ShellSort(int* data, int length)
{
int i;
int j;
int tmp;
int gap = length/2;
while(gap > 0)
{
for(i=gap;i<length;i++)
{
j = i-gap;
tmp = data[i];
while(j>=0&&data[j]>tmp)
{
data[j+gap] = data[j];
j = j-gap;
}
data[j+gap] = tmp;
}
gap = gap/2;
}
}
//归并排序(2项合并)
void MergeSort(int* data,int low,int mid, int high)
{
int* tmpArray = new int[high-low+1];
int i = low;
int j = mid+1;
int k=0;
while(i<=mid&&j<=high)
{
if(data[i] <= data[j])
{
tmpArray[k] = data[i];
k++;
i++;
}
else
{
tmpArray[k] = data[j];
k++;
j++;
}
}
while(i<=mid)
{
tmpArray[k] = data[i];
k++;
i++;
}
while(j<=high)
{
tmpArray[k] = data[j];
k++;
j++;
}
for(k=0,i=low;i<=high;k++,i++)
data[i] = tmpArray[k];
delete[] tmpArray;
}
void MergePass(int* data,int k,int n)
{
int i;
for(i=0;i+2*k-1<n;i=i+2*k)
{
MergeSort(data,i,i+k-1,i+2*k-1);
}
if(i+k-1< n)
{
MergeSort(data,i,i+k-1,n-1);
}
}
void Merge(int* data,int length)
{
for(int i=1;i<length;i = i*2)
{
MergePass(data,i,length);
}
}
//堆排序
void Sift(int* data,int low,int high)
{
int i = low;
int j = 2*i;
int tmp = data[i];
while(j <= high)
{
if(j<high && data[j] < data[j+1])
{
j++;
}
if(tmp < data[j])
{
data[i] = data[j];
i = j;
j = 2*i;
}
else
break;
}
data[i] = tmp;
}
void HeapSort(int* data, int n)
{
int i;
int tmp;
for(i= n/2;i>=0;i--)
Sift(data,i,n);
for(i=n;i>=1;i--)
{
tmp = data[1];
data[1] = data[i];
data[i] = tmp;
Sift(data,1,i-1);
}
}
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 内部排序
- 棋牌游戏运营须知
- x264 源码分析 (1)
- 视频通信领域新的发展趋势
- PHP stripos() 函数 注意事项
- [转]WinXP与WinCE串口的运行机制之比较
- 内部排序
- (iPhone/iPad开发)NSData与NSArray互相转换
- 解压-打包system.img文件
- PHP操作MongoDB技術總結
- 测试IDoc生成会计凭证
- pl sql 数据库
- jQuery事件收集
- jQuery乱谈(一)
- ABAP:FI常用BAPI