选择特点:和同一个数比较,最后交换
简单选择排序:不断把最小值放到最前面
void SelectSort(int A[], int n){
int i, j, min; //min是最小值下标
for(i=0; i<n; i++){
min = i;
for(j=i+1; j<n; j++)
if(A[j]<A[min])
min = j;
if(min!=i)
swap(A[i], A[min]);
}
}
双向选择排序:不断把最大的放在最后,最小的放到最前面
void SelectDoubleSort(int A[], int n){
int i, j, min, max, n1;
n1 = n;
for(i=0; i<n1; i++){
min = i;
max = n1-1;
for(j=i+1; j<n1; j++){
if(A[j]<A[min])
min = j;
if(A[j]>A[max])
max = j;
}
if(min!=i)
swap(A[i], A[min]);
if(max!=n1-1){
swap(A[n1-1], A[max]);
n1--;
}
}
}
冒泡特点:邻近比较,即时交换
单向冒泡排序
void BubbleSort(int A[], int n){
int i, j;
bool flag ;
for(i=0; i<n-1; i++){
flag = false;
for(j=n-1; j>i; j--)
if(A[j-1]>A[j]){
flag = true;
swap(A[j-1], A[j]);
}
if(flag==true)
return;
}
}
双向冒泡排序
void BubbleDoubleSort(int A[], int n){
int l, r;
int i, j;
l=0; r=n-1;
while(l<r){
for(i=l; i<r; i++)
if(A[i]>A[i+1])
swap(A[i], A[i+1]);
r--;
for(j=r-1; j>=l; j--)
if(A[j-1]>A[j])
swap(A[j-1], A[j]);
l++;
}
}
完整代码
#include <iostream>
#include <cstdlib>
using namespace std;
void print(int A[]) {
int i;
for(i=0; i<5; i++)
cout << A[i] << " ";
cout << endl;
system("pause");
}
void SelectSort(int A[], int n){
int i, j, min; //min是最小值下标
for(i=0; i<n; i++){
min = i;
for(j=i+1; j<n; j++)
if(A[j]<A[min])
min = j;
if(min!=i)
swap(A[i], A[min]);
}
}
void SelectDoubleSort(int A[], int n){
int i, j, min, max, n1;
n1 = n;
for(i=0; i<n1; i++){
min = i;
max = n1-1;
for(j=i+1; j<n1; j++){
if(A[j]<A[min])
min = j;
if(A[j]>A[max])
max = j;
}
if(min!=i)
swap(A[i], A[min]);
if(max!=n1-1){
swap(A[n1-1], A[max]);
n1--;
}
}
}
void BubbleSort(int A[], int n){
int i, j;
bool flag ;
for(i=0; i<n; i++){
flag = false;
for(j=n-1; j>i; j--)
if(A[j-1]>A[j]){
flag = true;
swap(A[j-1], A[j]);
}
if(flag==false)
return;
}
}
void BubbleDoubleSort(int A[], int n){
int l, r;
int i, j;
l=0; r=n-1;
while(l<r){
for(i=l; i<r; i++)
if(A[i]>A[i+1])
swap(A[i], A[i+1]);
r--;
for(j=r-1; j>=l; j--)
if(A[j-1]>A[j])
swap(A[j-1], A[j]);
l++;
}
}
int main(){
int i;
int A[5];
for(i=0; i<5; i++){
A[i] = rand()%100;
}
for(i=0; i<5; i++)
cout << A[i] << " ";
cout << endl;
// SelectSort(A, 5);
// BubbleDoubleSort(A, 5);
// SelectDoubleSort(A, 5);
BubbleSort(A, 5);
for(i=0; i<5; i++)
cout << A[i] << " ";
cout << endl;
return 0;
}