一、冒泡排序
int main()
{
int array[]={34,65,12,43,67,5,78,10,3,70};
int len=sizeof(array)/sizeof(int);
for(int i=0; i<len-1 ;i++)
{
for(int j=i; j<len; j++)
{
if(array[i]>array[j])
{
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
for(int i = 0; i < len ;i++)
{
cout<<array[i]<<' ';
}
return 0;
}
二、快速排序
void quickSort(int array[],int low, int high)
{
if(low>=high) return;
int left=low;
int right=high;
int key=array[low];//将第一个作为key
while(left<right)
{
while(left<right && array[right]>=key )//从右往左找第一个小于key的数
{ right--; }
array[left] = array[right];
while(left<right && array[left]<=key)
{ left++; }
array[right] = array[left];
}
array[right]=key;//记录key
quickSort(array,low,left-1);
quickSort(array,right+1,high);
}
int main(){
int array[]={34,65,12,43,67,5,78,10,3,70};
int len=sizeof(array)/sizeof(int);
quickSort(array,0,len-1);
for(int i=0; i<len; i++)
{
cout<<array[i]<<" ";
}
return 0;
}
三、归并排序
/*-----------------------递归 ----------------------------*/
void merge(int *arr,int* res , int low, int high)
{
int mid = (int)((low+high)/2);
int i = low,j=mid,k=low;
while(i<mid && j<high) res[k++] = arr[i]<arr[j] ? arr[i++] : arr[j++];
while(i<mid) res[k++] = arr[i++];
while(j<high) res[k++] = arr[j++];
for(k=low ;k < high ; k++) arr[k]=res[k];
}
void merge_sort_re(int* arr , int* res, int low, int high)
{
if((high-low)<=1) return; //最后划分成2个为一组
int mid = (int)((low+high)/2);
merge_sort_re(arr,res,low,mid);
merge_sort_re(arr,res,mid,high);
merge(arr,res,low,high);
}
/*-----------------------迭代 ----------------------------*/
void merge_sort_it(int* arr , int len)
{
int res[len];
for(int step = 1; step<len ; step*=2)
{
for(int beg = 0; beg<len ; beg+=step*2)
{
int low = beg, mid = min(beg+step,len), high = min(beg+step*2,len);
int i=low,j=mid,k=low;
while(i<mid && j<high) res[k++] = arr[i]<arr[j] ? arr[i++] : arr[j++];
while(i<mid) res[k++] = arr[i++];
while(j<high) res[k++] = arr[j++];
for(k=low ;k < high ; k++) arr[k]=res[k];
}
}
}
void merge_sort(int* arr, int len)
{
if(arr == NULL || len<=0) return;
int res[len];
merge_sort_re(arr , res , 0 ,len);//递归
//merge_sort_it(arr , len);//迭代
}
int main()
{
int arr[] = {22,44,1,3,5,7,96,35};
int len = sizeof(arr)/sizeof(int);
merge_sort(arr,len);
for(int i = 0 ; i<len ;i++)
{
cout<<arr[i]<<' ';
}
cout<<endl;
}
四、选择排序
void selectSort(int* arr,int len)
{
for(int i = 0; i<len-1; i++)
{
int key = i;
for(int j = i+1; j<len ; j++)
{
if(arr[key]>arr[j]) key=j;
}
if(key!=i)
{
int temp = arr[i];
arr[i] = arr[key];
arr[key] = temp;
}
}
}
五、插入排序
void insert_sort(int* arr,int len)
{
for(int i = 1; i < len ; i++)
{
int key = arr[i];
int j = i-1;
while(j>=0 && arr[j]>key)
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
}