編程学习历程
今天学习到了除冒泡排序外的另一种排序方法——直接选择排序。
直接选择排序是一种简单的排序方法。例如,要将一个包含n个元素的数组的各元素从小到大排序,其工作过程是:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序的元素中继续寻找最小元素,放到排序序列的起始。以此类推,直到排序完毕。
例
#include<iostream.h>
#define SIZE 8
int main()
{
int a[SIZE]={18,35,36,61,9,112,77,12};
for(int i=0;i<SIZE-1;i++)
{
int min=i;
for(int j=i+1;j<SIZE;j++)
{
if(a[j]<a[min])
min=j;
}
int temp=a[i];
a[i]=a[min];
a[min]=temp;
cout<<"After No."<<i+1<<"scan:";
for(int index=0;index<=SIZE-1;index++)
if(index==i+1)
cout<<"\t"<<"["<<a[index];
else
cout<<"\t"<<a[index];
cout<<"]"<<endl;
}
cout<<"After sorting:\t";
for(int index=0;index<=SIZE-1;index++)
cout<<"\t"<<a[index];
cout<<endl;
return 0;
}
用C语言写了一下quicksort,快排中主要运用了二分和递归的方法,下面来看一下例题:
题目描述
利用快速排序算法将读入的 N 个数从小到大排序后输出。
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)
输入格式
第 1 行为一个正整数 N,第 2行包含 N个空格隔开的正整数 ai ,为你需要进行排序的数,数据保证了 Ai不超过 10^9。
输出格式
将给定的 NN 个数从小到大输出,数之间空格隔开,行末换行且无空格。
输入输出样例
输入
5
4 2 4 5 1
输出
1 2 4 4 5
#include<iostream>
using namespace std;
int n,a[1000001];
void qsort(int l,int r)//应用二分思想
{
int mid=a[(l+r)/2];//中间数
int i=l,j=r;
do{
while(a[i]<mid) i++;//查找左半部分比中间数大的数
while(a[j]>mid) j--;//查找右半部分比中间数小的数
if(i<=j)//如果有一组不满足排序条件(左小右大)的数
{
swap(a[i],a[j]);//交换
i++;
j--;
}
}while(i<=j);//这里注意要有=
if(l<j) qsort(l,j);//递归搜索左半部分
if(i<r) qsort(i,r);//递归搜索右半部分
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
qsort(1,n);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
}