我只会从小大到大
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(){
srand(time(0));
int arr[100]={0};
cout << "排序前" << endl;
for (int i=0;i<100;i++){
arr[i]=rand()%100+1;
cout << arr[i]<<" ";
}
int begin = 0,end = 99;
int d =(end-begin+1)/2;
while (d>=1){
for(int i=begin+d;i<=end;i++){
int m=arr[i];
int j=i-d;
while(arr[j] > m && j >= begin){
arr[j+d]=arr[j];
j-=d;
}
arr[j+d]=m;
}
d=d/2;
}
cout << endl << "排序后" << endl;
for (int i = 0; i < 100; i++){
cout << arr[i]<<" ";
}
return 0;
}
```
比较简单,自己尝试修改成动态输入获取排序来练手:
#include <iostream>
using namespace std;
void shellSort(int arr[], int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
for (j = i; j >= gap && arr[j - gap] < temp; j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = temp;
}
}
}
int main() {
int arr[] = { 12, 34, 54, 2, 3 };
int n = sizeof(arr) / sizeof(arr[0]);
shellSort(arr, n);
cout << "排序好的: \n";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
求你们回答