程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話將數組中元素的數排序輸入的相干成績處理

C說話將數組中元素的數排序輸入的相干成績處理

編輯:關於C++

C說話將數組中元素的數排序輸入的相干成績處理。本站提示廣大學習愛好者:(C說話將數組中元素的數排序輸入的相干成績處理)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話將數組中元素的數排序輸入的相干成績處理正文


 成績描寫:輸出一個正整數數組,將它們銜接起來排成一個數,輸入能排出的一切數字中最小的一個。例如輸出數組{32,  321},則輸入這兩個能排成的最小數字32132。請給出處理成績的算法,並證實該算法。
      思緒:先將整數數組轉為字符串數組,然後字符串數組停止排序,最初順次輸入字符串數組便可。這裡留意的是字符串的比擬函數須要從新界說,不是比擬a和b,而是比擬ab與 ba。假如ab < ba,則a < b;假如ab > ba,則a > b;假如ab = ba,則a = b。比擬函數的界說是本處理計劃的症結。
      證實:為何如許排個序便可以了呢?簡略證實一下。依據算法,假如a < b,那末a排在b後面,不然b排在a後面。可應用反證法,假定排成的最小數字為xxxxxx,而且至多存在一對字符串知足這個關系:a > b,然則在構成的數字中a排在b後面。依據a和b湧現的地位,分三種情形斟酌:
      (1)xxxxab,用ba取代ab可以獲得xxxxba,這個數字是小於xxxxab,與假定抵觸。是以排成的最小數字中,不存在上述假定的關系。
      (2)abxxxx,用ba取代ab可以獲得baxxxx,這個數字是小於abxxxx,與假定抵觸。是以排成的最小數字中,不存在上述假定的關系。
      (3)axxxxb,這一步證實費事了一點。可以將中央部門算作一個全體ayb,則有ay < ya,yb < by成立。將ay和by表現成10進制數字情勢,則有下述關系式,這裡a,y,b的位數分離為n,m,k。
        關系1: ay < ya => a * 10^m + y < y * 10^n + a => a * 10^m - a < y * 10^n - y => a( 10^m - 1)/( 10^n - 1) < y
        關系2: yb < by => y * 10^k + b < b * 10^m + y => y * 10^k - y < b * 10^m - b => y < b( 10^m -1)/( 10^k -1)
        關系3: a( 10^m - 1)/( 10^n - 1) < y < b( 10^m -1)/( 10^k -1)  => a/( 10^n - 1)< b/( 10^k -1) => a*10^k - a < b * 10^n - b =>a*10^k + b < b * 10^n + a => a < b
       這與假定a > b抵觸。是以排成的最小數字中,不存在上述假定的關系。
       綜上所述,得出假定不成立,從而得出結論:關於排成的最小數字,不存在知足下述關系的一對字符串:a > b,然則在構成的數字中a湧現在b的後面。從而得出算法是准確的。
      參考代碼:

//從新界說比擬函數對象 
struct compare 
{ 
 bool operator() (const string &src1, const string &src2) 
 { 
  string s1 = src1 + src2; 
  string s2 = src2 + src1; 
  return s1 < s2; //升序分列,假如改成s1 > s2則為逆序分列 
 } 
}; 
//函數功效 : 把數組排成最小的數 
//函數參數 : pArray為數組,num為數組元素個數 
//前往值 : 無 
void ComArrayMin(int *pArray, int num) 
{ 
 int i; 
 string *pStrArray = new string[num]; 
 
 for(i = 0; i < num; i++) //將數字轉換為字符串 
 {  
  stringstream stream; 
  stream<<pArray[i]; 
  stream>>pStrArray[i]; 
 } 
 
 sort(pStrArray, pStrArray + num, compare()); //字符串數組排序 
 
 for(i = 0; i < num; i++) //打印字符串數組 
  cout<<pStrArray[i]; 
 cout<<endl; 
 
 delete [] pStrArray; 
} 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved