用c++编程实现数组的排序:将有15个元素的整型数组按从小到大的次序排序?

如题所述

排序算法有很多种,比如:冒泡排序,插入排序,选择排序,桶排序,递归排序...等等排序手法,如果你有兴趣的话可以去网上搜一搜具体实现思想。
我这里介绍最基础的选择排序。
选择排序:将第i元素与i后面的元素进行比较,每一次过去最大(最小)的值放在前面。
实现:
#include <iostream>
using namespace std;
int main()
{
int iNum[15] = {}; //你的15个乱序元素
;;;;; //各种初始化处理
for (int i = 0; i < 15 - 1; i++) //这里-1的原因是因为最后一个元素不需要排序,它肯定是最大/最小的那个数了
for (int j = i; j < 15; j++)
if (iNum[i] > iNum[j]) //把大放在前面的只要把>改为<就好了
{
int tmp = iNum[j];
iNum[j] = iNum[i];
iNum[i] = tmp;
}
;;;;; //其它工作,如输出等
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-02-19
#include<iostream>
using namespace std;

//求数组最小元素的函数
int findSmallest(int *list,int len)
{
int m_min = list[0];//设定最小值
int smallest_index = 0;//最小值下标
for (int i = 0; i < len; i++)
{
if (list[i] < m_min)
{
m_min = list[i];
smallest_index = i;
}
}
return smallest_index;
}

//将最小的数据从原数组中去除
void selectionSort(int* arr,int m_index)
{
for (int i = m_index; i < 7; i++)
{
arr[i] = arr[i + 1];
}
}

//打印排序完成的数组
void print_newarr(int *m_arr,int len)
{
for (int i = 0; i < len; i++)
{
cout << m_arr[i] << endl;
}
}

int main()
{
int m_list[] = { 2,3,-2,6,-9,4,-1 };
int len = sizeof(m_list) / sizeof(m_list[0]);
int new_arr[sizeof(m_list) / sizeof(m_list[0])];//新数组用于接收排好序
for (int i = 0; i < len; i++)
{
int num = findSmallest(m_list, len-i);
new_arr[i] = m_list[num];
selectionSort(m_list, num);
}
print_newarr(new_arr,len);
system("pause");
return 0;
}
第2个回答  2019-11-12
假设数组为a[15],存入数据
sort(a,a+15)
第3个回答  2019-11-13
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108//思路:用指针数组进行排序,保存排序后的下标到c中。即a[c[0:N-1]]是升序的// 然后依次比较c[i]为下标的有序数组a[c[0:N-1]]的各元素,进行顺序编号/*对已知整数数组a[]的元素按从小到大的顺序连续编号(即:值相同的元素有相同编号), 并将编号保存在数组b[]中. 即, a[i]的编号为b[i]. 要求: 1)用指针数组实现; 2)数组a的元素随机生成(值<10)。*/ #include<stdio.h>#include<stdlib.h>#include<time.h>#define N 10void printIntArr(int a[], int n);//打印整型跟数组a的前n个值//交换两个int*型指针的值void swap2intPointer(int **x, int **y){ int *temp = *x;//*x是int *型指针 *x = *y; *y = temp;};void swap2int(int *x, int *y){ int temp = *x; *x = *y; *y = temp;};int main(){ srand(time(NULL)); int i=0,j=0, k=0; int a[N]={},b[N]={},c[N]={};; int *p[N]={NULL}; int flag=1; //1表示有交换 //生成数组,并初始化指针数组 for(int i=0;i<N;i++) { a[i]=rand()%10; c[i]=i; p[i]=a+i; } printf("原始数组为:\n"); printIntArr(a,N); //对指针数组进行排序,使得指针数组对应中元素指向的数据依次上升 for(i=0;flag&&i<N-1;i++) { flag=0;//默认没有交换。这样在排好序时可以结束排序算法。 for( j=0;j<N-i-1;j++) { if(*p[j] >*p[j+1]) { swap2intPointer(&p[j],&p[j+1]); swap2int(c+j,c+j+1); flag=1; } } } //printf("排序后:\n"); //for(i=0;i<N;i++) //{ // printf("%3d ",*p[i]); //} //puts("\n"); /*i=0,j=0; printf("排序后的下标:\n"); for(i=0;i<N;i++) { printf("%3d ",c[i]); } puts("\n");*/ //最后一步:进行记录 i=0; j=1; while(i<N-1) { while(i<N-1 && a[c[i]]==a[c[i+1]]) { b[c[i]]=j; i++; } b[c[i]]=j++; i++; } if(a[c[N-2]]!=a[c[N-1]]) b[c[N-1]]=j; //打印数组元素大小编号 printf("原来数组元素的大小编号:\n"); for(i=0;i<N;i++) { printf("%3d ",b[i]); } puts("\n"); return 0; } //打印整型数组a的前元素void printIntArr(int a[], int n){ if(n<=0) return; for(int i=0;i<n;i++) printf("%3d ", a[i]); putchar('\n'); return;}本回答被网友采纳
相似回答