#include<iostream>#include<cmath>#include<algorithm>
using namespace std;//数组mun[]是数组arr[]的数据索引标志数组//数组arr[]是相关的数据数组int num[12]={1,2,3,4,5,6,7,8,9,10,11,12};int arr[12]={5,6,7,2,3,4,0,12,2,34,12,6};//comp函数用于比较arr[]数据的大小
bool comp(int i,int j){return(arr[i]<arr[j]);}voidprint_main(){
cout <<"Hello"<< endl;printf("----- The index after sort of arr[] -----\n");printf("----- The index order from to smallest to largest -----\n");printf("\n");printf("----- Printf the index ----- \n");//重新排序后的索引是由根据指向数据由小到大排列的,这边打印的索引index数组num[ ]是由大到小进行打印(i--)
std::sort(num, num +12+1, comp);for(int i =12; i >0; i--){printf("%d ", num[i]);}printf("\n");printf("----- Printf the arr using the index ----- \n");//重新排序后的索引是由根据指向数据由小到大排列的,这边索引index指向数据是由大到小进行排列(i--)for(int i =12; i >0; i--){int ind = num[i];printf("%d ", arr[ind]);}printf("\n");printf("\n");/****************/printf("----- Before sorting arr by std::sort ----- \n");for(int i =11; i >=0; i--){printf("%d ", arr[i]);}printf("\n");printf("----- After sorting arr by std::sort ----- \n");
std::sort(arr, arr +12);for(int i =11; i >=0; i--){printf("%d ", arr[i]);}printf("\n");}
2.程序运行结果
二、更改数据结构的排序程序
1. 创建相关的排序数据结构
创建一个以排序为目的的数据结构体,包含有存储的信息value和索引号ind
创建一个用于比较前后大小的比较函数by_value
#include<iostream>#include<cmath>#include<algorithm>#include<queue>structsort_t{int value;
size_t ind;};structby_value{booloperator()(sort_t const&left, sort_t const&right){return left.value < right.value;}};// 需要进行排序的数组int arr[12]={5,6,7,2,3,4,0,12,2,34,12,6};// 创建向量容器进行存储数组信息
std::vector<sort_t> sortArr;voidtestStructSort(){
sortArr.resize(12);for(int i =0; i <12; i++){
sortArr[i].value = arr[i];
sortArr[i].ind = i;}// 打印排序前的信息for(int i =0; i <12; i++){printf("%d ", sortArr[i].value);}printf("\n");for(int i =0; i <12; i++){printf("%d ", sortArr[i].ind);}printf("\n \n");// 进行相关的std::sort排序
std::sort(sortArr.begin(), sortArr.begin()+12,by_value());// 打印排序后的信息for(int i =0; i <12; i++){printf("%d ", sortArr[i].value);}printf("\n");for(int i =0; i <12; i++){printf("%d ", sortArr[i].ind);}printf("\n");}