日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法--排序--大小写字母数字分离(桶排序思想)

發布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法--排序--大小写字母数字分离(桶排序思想) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目: 對D,a,F,B,c,A,z這個字符串進行排序,要求將其中所有小寫字母都排在大寫字母的前面,但小寫字母內部和大寫字母內部不要求有序。比如經過排序之后為a,c,z,D,F,B,A,這個如何來實現呢?如果字符串中存儲的不僅有大小寫字母,還有數字。要將小寫字母的放到前面,大寫字母放在中間,數字放在最后,不用排序算法,又該怎么解決呢?

思路:

  • 先掃描一遍數組,計算3種類型的元素個數,計算出每個類型的起始下標
  • 掃描一遍,分別寫入該去的 “桶” ,再寫回原數組,O(n)復雜度
  • 桶排序參考:https://blog.csdn.net/qq_21201267/article/details/80993672#t10

    /*** @description: 分離開大小寫字符,但不改變相對順序(桶排序思想)* @author: michael ming* @date: 2019/4/13 18:25* @modified by: */ #include <iostream> #include <time.h> using namespace std; void randomABCandNum(char *ch, size_t N) //生成隨機大小字母和數字 {char tempch[26+26+10];int i, j, k, randIndex;for(i = 0; i < 26; )tempch[i++] = 'A' + i;for(j=0; j < 26; j++)tempch[i++] = 'a' + j;for(k=0; k < 10; k++)tempch[i++] = '0' + k;srand((unsigned)time(NULL));for(int x = 0; x < N; ++x){randIndex = rand()%62;ch[x] = tempch[randIndex];cout << ch[x] << " ";}cout << endl; } void countseparate(char *ch, size_t N) {size_t lowerNum = 0, upNum = 0, digitNum = 0;for(int i = 0; i < N; ++i) //計數,看每種類型有多少個{if(ch[i] >= 'a' && ch[i] <= 'z')lowerNum++;else if(ch[i] >= 'A' && ch[i] <= 'Z')upNum++;elsedigitNum++;}size_t lowerIndex = 0, upIndex = lowerNum, digitIndex = lowerNum+upNum;//每種類型的起始下標int *temp = new int [N];for(int i = 0; i < N; ++i) //按區間寫入{if(ch[i] >= 'a' && ch[i] <= 'z')temp[lowerIndex++] = ch[i];else if(ch[i] >= 'A' && ch[i] <= 'Z')temp[upIndex++] = ch[i];elsetemp[digitIndex++] = ch[i];}for(int i = 0; i < N; ++i){ch[i] = temp[i]; //寫回原數組}delete [] temp;temp = NULL; } void printArr(char* arr, size_t N) //打印字符數組 {for(int i = 0; i < N; ++i){cout << arr[i] << " ";}cout << endl; } int main() {cout << "請輸入N,程序生成大小寫字母和數字的組合隨機序列:";size_t N;cin >> N;char ch[N];randomABCandNum(ch, N);cout << "程序現將字符按[小寫字母][大寫字母][數字]排列,內部順序不變:" << endl;countseparate(ch, N);printArr(ch, N); }

    總結

    以上是生活随笔為你收集整理的算法--排序--大小写字母数字分离(桶排序思想)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。