各種排序算法實現

//冒泡排序:對輸入的num個數字進行排序
#include <iostream>
using namespace std;

const int num = 8;

int main()
{
    int a[num];
    int i,j,temp;
    for(i = 0; i < num; i++){
        cin>>a[i];
    }
    for(i = 1; i < num; i++){
        for(j = num - 1; j > i - 1; j--){
            if(a[j] < a[j-1]){
                temp = a[j];
                a[j] = a[j-1];
                a[j-1] = temp;
            }
        }
        for(int t = 0; t < num; t++){
            cout<<a[t]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

 

//插入排序:對輸入的num個數字進行排序
#include <iostream>
using namespace std;

const int num = 8;

int main()
{
int a[num];
int i,j,temp;
for(i = 0; i < num; i++){
cin>>a[i];
}
for(i = 1; i < num; i++){
temp = a[i];
for(j = i - 1; j >= 0; j--){
if(a[j] > temp){
a[j + 1] = a[j];
}
else break;
}
a[j+1] = temp;
for(int t = 0; t < num; t++){
cout<<a[t]<<" ";
}
cout<<endl;
}
return 0;
}

 


//選擇排序:對輸入的num個數字進行排序
#include <iostream>
using namespace std;

const int num = 8;

int main()
{
int a[num];
int i,j,temp,max;
for(i = 0; i < num; i++){
cin>>a[i];
}
for(i = num - 1; i > 0; i--){
max = a[0];
temp = 0;
for(j = 1; j <= i; j++){
if(a[j] > max){
max = a[j];
temp = j;
}
}
a[temp] = a[i];
a[i] = max;
for(int t = 0; t < num; t++){
cout<<a[t]<<" ";
}
cout<<endl;
}
return 0;
}

 

//二分排序:對輸入的num個小於哨兵值的數字進行排序
#include <iostream>
using namespace std;

const int num = 8;
void merge_sort(int a[], int p, int r);
void merge(int a[], int p, int q, int r);

int main()
{
int a[num];
int i;
for(i = 0; i < num; i++){
cin>>a[i];
}
merge_sort(a,0,num-1);
return 0;
}

void merge_sort(int a[], int p, int r)
{
int q;
if(p < r){
q = (p + r)/2;
merge_sort(a, p, q);
merge_sort(a, q+1, r);
merge(a, p, q, r);
for(int t = 0; t < num; t++){
cout<<a[t]<<" ";
}
cout<<endl;
}
}

void merge(int a[], int p, int q, int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int *a1 = new int[n1 + 1];
int *a2 = new int[n2 + 1];
int i,j,k;
for(i = 0; i < n1; i++){
a1[i] = a[p + i];
}
a1[n1] = 10000; //哨兵值
for(j = 0; j < n2; j++){
a2[j] = a[q + j + 1];
}
a2[n2] = 10000; //哨兵值
i = 0;
j = 0;
for(k = p; k <= r; k++){
if(a1[i] < a2[j]){
a[k] = a1[i];
i++;
}else{
a[k] = a2[j];
j++;
}
}
delete a1;
delete a2;
}

 

//快速排序:對輸入的num個數字進行排序
#include <iostream>
using namespace std;

const int num = 8;
void quick_sort(int a[], int p, int r);
int partition(int a[], int p, int r);

int main()
{
int a[num];
int i;
for(i = 0; i < num; i++){
cin>>a[i];
}
quick_sort(a,0,num-1);
return 0;
}

void quick_sort(int a[], int p, int r)
{
int q;
if(p < r){
q = partition(a, p, r);
quick_sort(a, p, q-1);
quick_sort(a, q+1, r);

}
}

int partition(int a[], int p, int r)
{
int x = a[r];
int i = p - 1;
for(int j = p; j < r; j++){
if(a[j] <= x){
i++;
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
a[r] = a[i+1];
a[i+1] = x;
for(int t = 0; t < num; t++){
cout<<a[t]<<" ";
}
cout<<endl;
return i+1;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章