C++实现字典排序如下
字典排序的基本思路:
第一步:从右至左找第一个左邻小于右邻的数,记下位置i,值list[a]
第二部:从右边往左找第一个右边大于list[a]的第一个值,记下位置j,值list[b]
第三步:交换list[a]和list[b]的值
第四步:将i以后的元素重新按从小到大的顺序排列
基本算法实现如下
#include<iostream>
#include<cmath>
using namespace std;
//定义swap交换数值函数
void swap(int a,int b) {
int temp;
temp = a;
a = b;
b = temp;
}
//定义冒泡排序函数
void bubbleSort(int arr[],int s,int e) {
int i, j;
for (i = 0; i < e - s; i++) {
for (j = s; j < e - i - 1; j++) {
if (arr[j] > arr[j + 1])
swap(arr[j], arr[j + 1]);
}
}
}
//定义字典排序函数
void wordSort(int arr[], int n) {
int num=1;
int i = 0, j = 0, k = 0;
int a, b;
int j1 = 0;
for (i = 1; i <= n; i++) {
num = num * i;
}
bubbleSort(arr, 0, n - 1);
for (k = num; k > 0; k--) {
for (i; i < n; i++) {
cout << arr[i];
}
cout << endl;
for (j = n - 1; j > 0; j--) {
if (arr[j] > arr[j - 1]) {
a = j - 1; //list[a]的脚标
break;
}
}
for (j1 = n - 1; j1 >= 0; j1--) {
if (arr[j1] > arr[a]) {
b = j1; //list[b]的角标
break;
}
}
swap(arr[a], arr[b]);
bubbleSort(arr, a + 1, n - 1);
}
}
//主函数
int main() {
int arr[] = {5,6,4,1,2};
int len = sizeof(arr);
wordSort(arr, len);
for (int i=0; i < len; i++) {
cout << arr[i];
}
return 0;
}