记录一下自己东粘西贴,自己敲下来的排序算法代码。

// 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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值