快速排序
void quickSort(int data[],int low,int high)
{
int i,j,pivokey;
if(low<high)
{
i=low;
j=high;
pivokey=data[i];
while(i<j)
{
while(i<j&&pivokey<=data[j])
j--;
if(i<j)
data[i++]=data[j];
while(i<j&&pivokey>=data[i])
i++;
if(i<j)
data[j--]=data[i];
}
data[i]=pivokey;
quickSort(data,low,i-1);
quickSort(data,i+1,high);
}
}
简单排序算法
void selectSort(int a[],int n)
{
int k,temp;
for(int i=0;i<n;i++)
{
k=i;
for(int j=i;j<n;j++)
{
if(a[k]>a[j])
{
k=j;
}
}
if(a[k]!=a[i])
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
}
冒泡法:
void maoPao(int a[],int num)//num元素个数
{
for(int i=0;i<num;i++)
for(int j=0;j<num-i-1;j++)
{
int temp;
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
归并排序:
#include "stdafx.h" #include<iostream> using namespace std; void Merge(int a[],int left,int mid,int right) //合并[left,mid]和[mid+1,right] { int i,j,k=0; i=left; //i为第一路的下标 j=mid+1; //j为第二路的下标 int *temp=new int[right-left+1]; while(i<=mid&&j<=right) temp[k++]=(a[i]<=a[j])?a[i++]:a[j++]; //依次合并2路到temp数组 while(i<=mid) temp[k++]=a[i++]; while(j<=right) temp[k++]=a[j++]; for(i=left,j=0;i<=right;++i,++j) //合并完数据写回v数组 a[i]=temp[j]; delete []temp; } void MergeSort(int a[],int p,int r) { if(r>p) { int q=(p+r)/2; MergeSort(a,p,q); MergeSort(a,q+1,r); Merge(a,p,q,r); } } int _tmain(int argc, _TCHAR* argv[]) { int A[]={1,9,8,11,2,6,10,4,99,12,87,3,21}; MergeSort(A,0,12); for(int i=0;i<13;i++) cout<<A[i]<<" "; cout<<endl; getchar(); return 0; }
插入排序
// Insert.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<iostream> using namespace std; #define length(arr) (sizeof(arr)/sizeof(arr[0])) void output(int arr[],int n) { for(int i=0; i< n;i++) printf("%d ",arr[i]); cout<<endl; } void insert_sort(int arr[],int n) { int i,j,temp; for(i=1;i<n;i++) { temp=arr[i]; j=i; if(temp<arr[j-1]) { while(temp<arr[j-1]&&j>0) { arr[j]=arr[j-1]; j--; } arr[j]=temp; } } } int _tmain(int argc, _TCHAR* argv[]) { int a[]={4,3,8,9,7,10,1,11,99,100,15}; int n=length(a); output(a,n); insert_sort(a,n); output(a,n); getchar(); return 0; }