各种排序算法
来源:互联网 发布:windows 防毒墙 编辑:程序博客网 时间:2024/06/06 02:28
#include<iostream>
#include<stdio.h>
using namespace std;
void print(int data[],int s, int n)
{
for(int i = s; i < n; i++)
{
printf("%d ",data[i]);
}
cout<<endl;
}
void bubbleSort(int data[], int n)
{
for(int i=0; i<n-1; i++)
for( int j = n-1; j >= i; j--)
{
if( data[j] > data[j+1] )
{
data[j] = data[j] ^ data[j+1];
data[j+1] = data[j] ^ data[j+1];
data[j] = data[j] ^ data[j+1];
}
}
}
void insertSort(int data[], int n)
{
for(int i=1; i<n; i++)
{
int temp = data[i];
int j ;
for( j = i-1; temp < data[j] && j>=0 ; j--)
data[j+1] = data[j] ;
data[j+1] = temp;
}
}
void selectSort(int data[], int n)
{
for(int i=0; i<n-1; i++)
{
int min = i;
for( int j = i+1; j<n ; j++)
if( data[min] > data[j])
min = j;
if(min != i)
{
data[i] = data[i] ^ data[min];
data[min] = data[i] ^ data[min];
data[i] = data[i] ^ data[min];
}
}
}
void merge(int data[],int s,int mid,int e)
{
int n1= mid - s +1;
int n2 = e - mid ;
int t1[n1] ;
int t2[n2] ;
for( int i = 0; i< n1; i++)
{
t1[i] = data[s+i];
}
for( int i = 0; i< n2 ; i++)
{
t2[i] = data[mid + 1 +i];
}
int i =0,j =0,z=s;
while(i < n1 && j < n2)
{
if(t1[i] <= t2[j])
{
data[z++] = t1[i++];
}
else
{
data[z++] = t2[j++];
}
}
while(i < n1 )
data[z++] = t1[i++];
while(j < n2 )
data[z++] = t2[j++];
}
void mergeSort(int data[], int s, int e)
{
if(s < e)
{
int mid = s + (e - s)/2;
mergeSort(data,s,mid);
mergeSort(data,mid+1,e);
merge(data,s,mid,e);
}
}
int partion(int data[], int s, int e)
{
int start =s;
int end = e;
int temp = data[s];
while( start < end)
{
while(start < end && data[end] > temp) end--;
if(start < end)
{
data[start++] = data[end];
}
while(start < end && data[start] < temp) start++;
if(start < end)
{
data[end--] = data[start];
}
}
data[start] = temp;
return start;
}
void quickSort(int data[], int s, int e)
{
if( s < e)
{
int temp = partion(data,s,e);
quickSort(data,s,temp-1);
quickSort(data, temp+1, e);
}
}
void heapMax(int data[],int index, int n)
{
int max_index;
for( int i = index; i*2+1 < n; )
{
if( i*2 +2 < n )
max_index = data[i*2+1] >data[i*2+2] ? i*2+1: i*2+2;
if( data[i] < data[max_index])
{
data[i] = data[i] ^ data[max_index];
data[max_index] = data[i] ^ data[max_index];
data[i] = data[i] ^ data[max_index];
i = max_index;
}
else
break;
}
}
void buildHeap(int data[],int n)
{
for( int i = (n-2)/2; i >=0; i--)
{
heapMax(data, i, n);
}
}
void heapSort(int data[],int n)
{
buildHeap(data,n);
for(int i = n-1; i >0; i--)
{
data[i] = data[i] ^ data[0];
data[0] = data[i] ^ data[0];
data[i] = data[i] ^ data[0];
heapMax(data, 0, i);
}
}
int main()
{
int data[7] = {10,9,8,7,6,5,4};
//bubbleSort(data,7);
//insertSort(data,7);
//selectSort(data,7);
//mergeSort(data,0,6);
//quickSort(data,0,6);
heapSort(data,7);
print(data,0,7);
return 0;
}
#include<stdio.h>
using namespace std;
void print(int data[],int s, int n)
{
for(int i = s; i < n; i++)
{
printf("%d ",data[i]);
}
cout<<endl;
}
void bubbleSort(int data[], int n)
{
for(int i=0; i<n-1; i++)
for( int j = n-1; j >= i; j--)
{
if( data[j] > data[j+1] )
{
data[j] = data[j] ^ data[j+1];
data[j+1] = data[j] ^ data[j+1];
data[j] = data[j] ^ data[j+1];
}
}
}
void insertSort(int data[], int n)
{
for(int i=1; i<n; i++)
{
int temp = data[i];
int j ;
for( j = i-1; temp < data[j] && j>=0 ; j--)
data[j+1] = data[j] ;
data[j+1] = temp;
}
}
void selectSort(int data[], int n)
{
for(int i=0; i<n-1; i++)
{
int min = i;
for( int j = i+1; j<n ; j++)
if( data[min] > data[j])
min = j;
if(min != i)
{
data[i] = data[i] ^ data[min];
data[min] = data[i] ^ data[min];
data[i] = data[i] ^ data[min];
}
}
}
void merge(int data[],int s,int mid,int e)
{
int n1= mid - s +1;
int n2 = e - mid ;
int t1[n1] ;
int t2[n2] ;
for( int i = 0; i< n1; i++)
{
t1[i] = data[s+i];
}
for( int i = 0; i< n2 ; i++)
{
t2[i] = data[mid + 1 +i];
}
int i =0,j =0,z=s;
while(i < n1 && j < n2)
{
if(t1[i] <= t2[j])
{
data[z++] = t1[i++];
}
else
{
data[z++] = t2[j++];
}
}
while(i < n1 )
data[z++] = t1[i++];
while(j < n2 )
data[z++] = t2[j++];
}
void mergeSort(int data[], int s, int e)
{
if(s < e)
{
int mid = s + (e - s)/2;
mergeSort(data,s,mid);
mergeSort(data,mid+1,e);
merge(data,s,mid,e);
}
}
int partion(int data[], int s, int e)
{
int start =s;
int end = e;
int temp = data[s];
while( start < end)
{
while(start < end && data[end] > temp) end--;
if(start < end)
{
data[start++] = data[end];
}
while(start < end && data[start] < temp) start++;
if(start < end)
{
data[end--] = data[start];
}
}
data[start] = temp;
return start;
}
void quickSort(int data[], int s, int e)
{
if( s < e)
{
int temp = partion(data,s,e);
quickSort(data,s,temp-1);
quickSort(data, temp+1, e);
}
}
void heapMax(int data[],int index, int n)
{
int max_index;
for( int i = index; i*2+1 < n; )
{
if( i*2 +2 < n )
max_index = data[i*2+1] >data[i*2+2] ? i*2+1: i*2+2;
if( data[i] < data[max_index])
{
data[i] = data[i] ^ data[max_index];
data[max_index] = data[i] ^ data[max_index];
data[i] = data[i] ^ data[max_index];
i = max_index;
}
else
break;
}
}
void buildHeap(int data[],int n)
{
for( int i = (n-2)/2; i >=0; i--)
{
heapMax(data, i, n);
}
}
void heapSort(int data[],int n)
{
buildHeap(data,n);
for(int i = n-1; i >0; i--)
{
data[i] = data[i] ^ data[0];
data[0] = data[i] ^ data[0];
data[i] = data[i] ^ data[0];
heapMax(data, 0, i);
}
}
int main()
{
int data[7] = {10,9,8,7,6,5,4};
//bubbleSort(data,7);
//insertSort(data,7);
//selectSort(data,7);
//mergeSort(data,0,6);
//quickSort(data,0,6);
heapSort(data,7);
print(data,0,7);
return 0;
}
- 【算法】各种排序算法
- 各种排序算法
- 各种排序算法
- 各种排序算法收集
- 各种排序算法
- 各种排序算法小结
- 各种排序算法小结
- 各种内部排序算法!
- 各种排序算法小结
- 各种排序算法
- 各种排序算法
- 各种排序算法介绍
- 各种排序算法
- 各种排序算法比较
- 各种排序算法
- 各种排序算法
- C++各种排序算法
- 各种排序算法
- Hibernate 学习笔记 (都是干货)
- Unity3d 程序定时器
- 谈谈即时通讯开发系统
- Android Service实现详细过程
- pl/sql输出正三角、倒三角、平行四边形
- 各种排序算法
- Android中常用工具类2
- unity3d中调用别的exe应用程序方法
- 如何在当前连接的数据库建立查询语句或编辑数据库脚本
- Java基础---第十二天 多线程
- 23设计模式的定义
- session超时或未登录时回到登录界面,如有frame跳出frame
- MFC中richedit控件插入BMP图片
- vim c 开发自动换行