// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
void bubblesort(int* data,int n)
{
for(int i=0;i<n;i++)
{
for(int j = i+1;j<n;j++)
{
if(data[i] > data[j])
{
swap(data[i],data[j]);
}
}
}
}
/************************
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,
顺序放在已排好序的数列的最后,
直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法。
************************/
void selectsort(int* data,int n)
{
int j =0;
while(j<n-1)
{
for(int i=0;i<n-1;i++)
{
if(data[i]>data[i+1])
{
swap(data[i],data[i+1]);
}
}
j++;
}
}
/*
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
1. 从第一个元素开始,该元素可以认为已经被排序
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5. 将新元素插入到该位置中
6. 重复步骤2
*/
void insertsort(int* data,int n)
{
for(int i=1;i<n;i++)
{
int temp = data[i];
int pos = i-1;
while(pos>=0 && temp<data[pos])
{
data[pos+1] = data[pos];
pos--;
}
data[pos+1]=temp;
}
}
/*
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,
然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
一趟快速排序的算法是:
1)设置两个变量I、J,排序开始的时候:I=1,J=N-1;
2)以第一个数组元素作为关键数据,赋值给X,即 X=A[0];
3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,让该值与X交换;
4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于X的值,让该值与X交换;
5)重复第3、4步,直到 I=J;
*/
void quicksort(int* data,int left,int right)
{
int i = left;
int j = right;
int middle = data[(left+right)/2];
while((data[i]<middle)&&(i<right))
i++;
while((data[j]>middle)&&(j>left))
j--;
if(i<=j)
{
swap(data[i],data[j]);
i++;
j--;
}
if(left<j)
quicksort(data,left,j);
if(right>i)
quicksort(data,i,right);
}
void swap(int a ,int b)
{
int temp = a;
a = b;
b = temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n,number,sortnumber;
cout<<"input how many numbers you want; "<<endl;
cin>>n;
int *data = new int[n];
int *backup ;
backup = data;
cout<<"please input number you want to sort: "<<endl;
for(int i=0;i<n;i++)
{
cin>>number;
*data = number;
++data;
}
data = backup;
for(int i=0;i<n;i++)
{
++data;
}
cout<<"please select one of the sort method below: "<<endl;
cout<<"1.bubblesort(冒泡) ; 2. selectsort(选择);3 insertsort(插入); 4.quicksort(快速)."<<endl;
cin>>sortnumber;
switch(sortnumber)
{
case 1 :
bubblesort(backup,n);
break;
case 2:
selectsort(backup,n);
break;
case 3:
insertsort(backup,n);
break;
case 4:
quicksort(backup,0,n-1);
break;
}
data = backup;
for(int i=0;i<n;i++)
{
cout<<" - "<<*data;
data++;
}
data = backup;
delete[] data;
return 0;
}