C ++程序进行振动筛排序
振动筛排序用于对给定数据进行排序。与Bubble排序不同,Shaker排序在两个方向上都对数组进行排序。该算法最差的复杂度是O(n^2)。
算法
Begin ShakerSort() function has ‘arr’ the array of data and ‘n’ the number of values, in the argument list. //使用嵌套的for循环实现排序算法。 The parent loop will run on ‘i’ from 0 to n-1 and contains two loops inside. The first loop will run on ‘j’ from i+1 to n-1 and use swap() if a[j] < a[j-1]. Decrement n. The second loop will run on 'k' from m-1 to i+1 and use swap() if a[k] < a[k-1]. Increment i. End
范例程式码
#include<iostream>
using namespace std;
void swap(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void ShakerSort(int a[], int m) {
int i, j, k;
for(i = 0; i < m;) {
for(j = i+1; j < m; j++) {
if(a[j] < a[j-1])
swap(&a[j], &a[j-1]);
}
m--;
for(k = m-1; k > i; k--) {
if(a[k] < a[k-1])
swap(&a[k], &a[k-1]);
}
i++;
}
}
int main() {
int n, i;
cout<<"\nEnter the number of data element to be sorted: ";
cin>>n;
int a[n];
for(i = 0; i < n; i++) {
cout<<"Enter element "<<i+1<<": ";
cin>>a[i];
}
ShakerSort(a, n);
cout<<"\nSorted Data ";
for (i = 0; i < n; i++)
cout<<"->"<<a[i];
return 0;
}输出结果
Enter the number of data element to be sorted: 4 Enter element 1: 3 Enter element 2: 1 Enter element 3: 7 Enter element 4: 6 Sorted Data ->1->3->6->7