简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
2010-12-24 11:08
519 查看
代码
// Ch08sort.cpp : Defines the entry point for the console application.
//默认是从小到大排序
#include <time.h>
#include <iostream>
#include <iomanip>
using namespace std;
#define SIZE 10
#define MAX 10000
//直接插入排序080201
//原理:每次将待排序的记录,按其关键字大小插入到前边已经排好序的子文件中的适当位置
int InsertSort(int arr[],int len){
int temp,j;
for(int i=1;i<len;i++){
if(arr[i]<arr[i-1]){
temp=arr[i];
j=i;
do{
arr[j]=arr[j-1];
j--;
}while(j>0&&arr[j-1]>temp);
arr[j] = temp;
}
}
return 0;
}
//交换排序---冒泡排序,快速排序
//原理:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
//冒泡排序080301
int BubbleSort(int arr[],int len){
int k,temp ;
for(int i=0;i<len-1;i++){
k = i;
for(int j=i+1;j<len;j++){
if(arr[j]<arr[k])
k = j;
}
if(k!=i){
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
return 0;
}
//快速排序080302
int Partition(int arr[],int len,int i,int j){
int pivot = arr[i];
while(i<j){
while(i<j&&arr[j]>=pivot){
j--;
}
if(i<j){
arr[i++] = arr[j];
}
while(i<j&&arr[i]<=pivot){
i++;
}
if(i<j){
arr[j--] = arr[i];
}
}
arr[i] = pivot;
return i;
}
int QuickSort(int arr[],int len,int low=0,int high=SIZE){
int pivotpos;
if(low<high){
pivotpos = Partition(arr,len,low,high);
QuickSort(arr,len,low,pivotpos-1);
QuickSort(arr,len,pivotpos+1,high);
}
return 0;
}
//直接选择排序080401
//原理:每一趟从待排序的记录中选出关键字最小的记录,顺序放到已排好序的子文件的最后
int StraightSelect(int arr[],int len){
int temp=0;
int k;
for(int i=0;i<len;i++){
k=i;
for(int j=k+1;j<len;j++){
if(arr[j]<arr[k]){
k = j;
}
}
if(k!=i){
temp = arr[k];
arr[k] = arr[i];
arr[i] = temp;
}
}
return 0;
}
//桶排序
//打印数组
int printarr(int arr[],int len){
for(int i=0;i<len;i++){
if(i%10==0)
cout<<endl;
cout<<setw(4)<<arr[i]<<" ";
}
cout<<endl;
return 0;
}
int main()
{
int arr[SIZE];
int len = sizeof(arr)/sizeof(arr[0]);//SIZE
srand( (unsigned)time( NULL ) );
for(int i=0;i<len;i++){
arr[i] =rand()%MAX;
}
printarr(arr,len);
// StraightSelect(arr,len);
// InsertSort(arr,len);
// BubbleSort(arr,len);
QuickSort(arr,len);
printarr(arr,len);
return 0;
}
// Ch08sort.cpp : Defines the entry point for the console application.
//默认是从小到大排序
#include <time.h>
#include <iostream>
#include <iomanip>
using namespace std;
#define SIZE 10
#define MAX 10000
//直接插入排序080201
//原理:每次将待排序的记录,按其关键字大小插入到前边已经排好序的子文件中的适当位置
int InsertSort(int arr[],int len){
int temp,j;
for(int i=1;i<len;i++){
if(arr[i]<arr[i-1]){
temp=arr[i];
j=i;
do{
arr[j]=arr[j-1];
j--;
}while(j>0&&arr[j-1]>temp);
arr[j] = temp;
}
}
return 0;
}
//交换排序---冒泡排序,快速排序
//原理:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
//冒泡排序080301
int BubbleSort(int arr[],int len){
int k,temp ;
for(int i=0;i<len-1;i++){
k = i;
for(int j=i+1;j<len;j++){
if(arr[j]<arr[k])
k = j;
}
if(k!=i){
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
return 0;
}
//快速排序080302
int Partition(int arr[],int len,int i,int j){
int pivot = arr[i];
while(i<j){
while(i<j&&arr[j]>=pivot){
j--;
}
if(i<j){
arr[i++] = arr[j];
}
while(i<j&&arr[i]<=pivot){
i++;
}
if(i<j){
arr[j--] = arr[i];
}
}
arr[i] = pivot;
return i;
}
int QuickSort(int arr[],int len,int low=0,int high=SIZE){
int pivotpos;
if(low<high){
pivotpos = Partition(arr,len,low,high);
QuickSort(arr,len,low,pivotpos-1);
QuickSort(arr,len,pivotpos+1,high);
}
return 0;
}
//直接选择排序080401
//原理:每一趟从待排序的记录中选出关键字最小的记录,顺序放到已排好序的子文件的最后
int StraightSelect(int arr[],int len){
int temp=0;
int k;
for(int i=0;i<len;i++){
k=i;
for(int j=k+1;j<len;j++){
if(arr[j]<arr[k]){
k = j;
}
}
if(k!=i){
temp = arr[k];
arr[k] = arr[i];
arr[i] = temp;
}
}
return 0;
}
//桶排序
//打印数组
int printarr(int arr[],int len){
for(int i=0;i<len;i++){
if(i%10==0)
cout<<endl;
cout<<setw(4)<<arr[i]<<" ";
}
cout<<endl;
return 0;
}
int main()
{
int arr[SIZE];
int len = sizeof(arr)/sizeof(arr[0]);//SIZE
srand( (unsigned)time( NULL ) );
for(int i=0;i<len;i++){
arr[i] =rand()%MAX;
}
printarr(arr,len);
// StraightSelect(arr,len);
// InsertSort(arr,len);
// BubbleSort(arr,len);
QuickSort(arr,len);
printarr(arr,len);
return 0;
}
相关文章推荐
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- 排序算法:冒泡排序、插入排序、选择排序、快速排序对比
- 最简单之Java实现冒泡排序、选择排序、插入排序、希尔排序、归并排序和快速排序(转载请注明出处)
- JAVA中排序算法(冒泡排序、选择排序、插入排序、快速排序)
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- 冒泡排序,选择排序,插入排序,快速排序的简单性能测试
- java实现各种排序算法(包括冒泡排序,选择排序,插入排序,快速排序(简洁版))及性能测试
- 冒泡排序,选择排序,插入排序,快速排序
- 排序算法一(冒泡排序、选择排序、插入排序)
- java实现冒泡排序,插入排序,选择排序,快速排序
- 三种基础排序算法(选择排序、插入排序、冒泡排序)
- php实现冒泡排序,选择排序,插入排序和快速排序
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- 易混的排序算法:冒泡排序、选择排序、快速排序
- 常用的排序算法(包括冒泡排序,选择排序,插入排序,希
- Javascript排序算法(冒泡排序,选择排序,插入排序,归并排序,快速排序)
- java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试
- 【学习总结】Java中最常用的三大排序算法-冒泡排序、选择排序、插入排序
- 排序算法(冒泡排序、选择排序、插入排序)