写一个函数用选择法将n个整数由大到小排序,主函数通过键盘输入10 个整数。然后通过函数调用实现排序。
#include "stdio.h"
int GetMaxPos(int arr[],int n){
//利用选择法思路,这个函数的功能是获取到arr数组中前n项最大值的坐标
int i,MaxPos = 0;//我认为第一个是最大的
for(i = 0;i <= n - 1;i++){
if(arr[MaxPos] < arr[i+1]){
MaxPos = i + 1;
}
}
return MaxPos;
}
void Sort(int arr[],int n){
//吧数组虚拟出来,并将最大的值与最后一个值做交换
int i,temp;
for(i = n-1;i > 1;i--){
//将最大值和最后一个值进行交换
temp = arr[GetMaxPos(arr,i)];
arr[GetMaxPos(arr,i)] = arr[i];
arr[i] = temp;
}
}
int main(){
int arr[] = {1,6,3,4,5,3,4,3,2,2,1,5,4,5,3};
int i;
//printf("%d",GetMaxPos(arr,5));
int size = sizeof(arr)/sizeof(int);//获取数组长度
Sort(arr,size);
for(i = 0;i < size;i++){
printf("%d\t",arr[i]);
}
return 0;
}
#include <iostream>
using namespace std;
void InsertSort(int a[], int n)
{
for (int i = 1; i<n; i++) {
if (a[i] < a[i - 1]) { //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入
int j = i - 1;
int x = a[i]; //复制为哨兵,即存储待排序元素
a[i] = a[i - 1]; //先后移一个元素
while (x < a[j]) { //查找在有序表的插入位置
a[j + 1] = a[j];
j--; //元素后移
}
a[j + 1] = x; //插入到正确位置
}
}
}
int main() {
int a[10];
cout << "请输入10个整数:";
for (int k = 0; k < 10; k++)
cin >> a[k];
InsertSort(a, 10);
cout << "排序后整数序列:";
for (int j = 9; j>=0; j--) {
cout << a[j] << " ";
}
cout << endl;
system("pause");
return 0;
}