1. 程式人生 > >【演算法】按頻率高低來進行排序

【演算法】按頻率高低來進行排序

題目:設計一種排序方法,安裝元素的頻率對陣列進行排序,頻率高的在前,頻率相同的元素按照原來的順序排列。比如:

陣列int a[19] = {1,2,2,3,3,3,4,4,5,5,5,5,6,6,6,7,8,9,10},

輸出: {5,5,5,5,3,3,3,6,6,6,2,2,4,4,1,7,8,9,10}

思路1:可以將它存入一個二維陣列中,第一行按順序存入數字,重複的不存;第二行存入對應上面數字的出現頻率。可以用一個標誌來實現。當發現存過了,則頻率+1,並把標記變0;如果標記為1,則代表沒存過,存入資料,並把頻率變為1.結束時重置標誌位1.

#include<stdio.h>

int paixu(int a[],int n)
{
	int i=0,j=0,flag=1;
	int nu=0;
	int b[2][10]={0};
	for(i=0;i<n;i++){
		for(j=0;j<nu;j++)
			if(a[i]==b[0][j]){
				b[1][j]++;
				flag=0;
				break;
			}
		if(flag){
			b[0][nu]=a[i];
			b[1][nu]++;
			nu++;
		}
			flag=1;		
		
	}
	


	for(i=0;i<nu;i++){
		for(;b[1][i]>0;b[1][i]--)
			printf("%d,",b[0][i]);

	}
	return 0;

}

思路2:可以將陣列1中的數字看成是陣列2的下標,而陣列2則記錄他的下標所對應的陣列1的數字的個數。例如:

b[5]=4,    代表a陣列中5出現了4次。

#include <stdio.h>
int main()
{
    inta[19]={1,2,2,3,3,3,4,4,5,5,5,5,6,6,6,7,8,9,10};
    int nu[11]={0,0,0,0,0,0,0,0,0,0,0};
    int i=0,j=0,n=0,m=0;
    for(;i<19;i++){
        m=a[i];
        nu[m]++;
    }
    for(j=19;j<1;j--)
        for(i=0;i>11;i++){
            if(nu[i]==j){
                n=j;
                while(n--){
                    printf("%d,",i);
                }
            }           
        }
     
 
 
    return 0;
}

相關推薦

演算法頻率高低進行排序

題目:設計一種排序方法,安裝元素的頻率對陣列進行排序,頻率高的在前,頻率相同的元素按照原來的順序排列。比如: 陣列int a[19] = {1,2,2,3,3,3,4,4,5,5,5,5,6,6,

演算法最快最簡單的排序——桶排序

在我們生活的這個世界中到處都是被排序過的。站隊的時候會按照身高排序,考試的名次需要按照分數排序,網上購物的時候會按照價格排序,電子郵箱中的郵件按照時間排序……總之很多東西都需要排序,可以說排序是無處不在。現在我們舉個具體的例子來介紹一下排序演算法。    首先出場的我們的主人

轉載IntelliJ IDEA配置JUnit進行單元測試

dbd ima pom.xml format height eight nsh 格式 oot 前提條件 安裝JDK,並配置好環境變量 工程已解決JUnit依賴關系(pom.xml) IDEA中JUnit配置 IDEA自帶一個JUnit插件,打開Settings窗口搜

字節編址與字編址

基本 不同的 問題: nbsp 數量 大小 不同 空間 ref 我們先從一道簡單的問題說起! 設有一個1MB容量的存儲器,字長32位,問:按字節編址,字編址的尋址範圍以及各自的尋址範圍大小? 如果按字節編址,則

如何應用Query語句進行規則的語法設置?

where 編輯 designer 屬性 member expr IT 找到你 過程 在Altium Designer中, 設計規則通常用來定義用戶的設計需求。 這些規則涵蓋了設計的方方面面, 從布線寬度, 對象的安全間距,內電層的連接風格, 過孔風格等等。

JDK的Parser解析Java原始碼詳解

轉自:https://www.jb51.net/article/92989.htm 這篇文章主要介紹了JDK的Parser來解析Java原始碼的相關資料,需要的朋友可以參考下 在JDK中,自帶了一套相關的編譯API,可以在Java中發起編譯流程,解析Java原始檔然後獲取其語法樹,在JDK的

函式和常用模組day05:不同目錄間進行模組呼叫(八)

本節內容 1、背景 2、函式功能解釋 3、絕對路徑和相對路徑 4、不同目錄間進行模組呼叫 一、背景   之前寫了軟體開發目錄規範這篇部落格,相信很多人都已經知道,我們在寫程式時需要遵循一定的規範,不然,就算很簡答的邏輯程式的程式碼,讀起來會很費勁,佔用了我們大量的時間,但是,我們一旦用了這樣的規範

演算法字串迴圈移位後是否包含

問題 給定兩個字串s1和s2,要求判斷s2是否能夠被通過s1做迴圈移位(rotate)得到的字串包含。 例如,s1=AABCD和s2=CDAA,返回true;給定s1=ABCD和s2=ACBD,返回false。 解法一 最直接最笨的方法就對s1進行迴圈移動,再

12、演算法查詢演算法總結

一、順序查詢 1、定義     順序查詢屬於無序查詢,從資料結構的一端開始,順序掃描,依次將掃描到的節點關鍵字與給定值K相比,若相等,則表示查詢成功,若掃描結束,仍未找到關鍵字與給定值K相等,則表示查詢失敗。 時間複雜度分析     查詢成功時:平均查詢長度為(N+1)/2   

13、演算法演算法複雜度分析

一、演算法的時間複雜度分析 1、時間複雜度的定義     在進行演算法分析時,演算法中基本操作語句重複執行的次數是問題規模n的某個函式,用T(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,T(n)/f(n)的極限值為不等於零的常數,則稱f(n)是T(n)的同數量級函式,

11、演算法排序演算法總結

常見排序演算法總結 一、氣泡排序 1、定義     氣泡排序是一種比較簡單的排序演算法,它會遍歷若干次要排序的數列,每次便利時,它都會從前往後依次的比較兩個相鄰的數的大小;如果前者比後者大,則交換它們的位置。     這樣一次遍歷之後,最大的元素就在數列的末尾了。採用相同的方法在

演算法第三章作業 實踐報告

【演算法】實踐第三章作業 1. 實踐題目  最大子段和  2. 問題描述 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時,定義子段和為0。

演算法-003 三次貝塞爾曲線的交點

【演算法】-003 三次貝塞爾曲線的交點   最近在工作中遇到一個問題,想通過計算兩條三次貝塞爾曲線的交點位置。嘗試了列舉法之後覺得計算速度太慢,於是來找其他演算法。 文章目錄 【演算法】-003 三次貝塞爾曲線的交點 1、 列舉法求貝塞爾曲線交

演算法-002 小數四捨五入截斷

【演算法】-002 小數四捨五入截斷   實際應用中,由於採集裝置的精度問題,雖然測量值在有效範圍內,但可能資料尾部會處在一直跳變的過程中。為了將不穩定的資料位捨去,因此需要將測試資料進行帶四捨五入的截斷。 【演算法】-002 小數四捨五入截斷

Python+opencv利用sobel進行邊緣檢測(細節講解)

#! usr/bin/env python # coding:utf-8 # 2018年7月2日06:48:35 # 2018年7月2日23:11:59 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2

演算法cuda 快排

核心程式碼: __global__ void cdp_simple_quicksort(unsigned int *data, int left, int right, int depth) { // If we're too deep or there are few el

演算法以給定值x為基準將連結串列分割成兩部分,所有小於x的結點排在大於或等於x的節點之前

/* * 直接建立兩個連結串列:一個連結串列存放小於x的元素,另一個存放大於或等於x的元素。 * 然後迭代訪問整個連結串列,將元素插入before或者after連結串列前端!!!一旦抵達連結串列末端,則表明拆分完畢,最後合併兩個連結串列。 */

演算法二叉樹前序、中序、後序遍歷相互求法(轉)

二叉樹前序、中序、後序遍歷相互求法 原文地址      今天來總結下二叉樹前序、中序、後序遍歷相互求法,即如果知道兩個的遍歷,如何求第三種遍歷方法,比較笨的方法是畫出來二叉樹,然後根據各種遍歷不同的特性來求,也可以程式設計求出,下面我們分別說明。  

演算法二叉樹的遞迴和非遞迴遍歷(轉)

原文地址 【寫在前面】   二叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序、中序以及後序三種遍歷方法。因為樹的定義本身就 是遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且程式碼很簡潔。而對於樹的遍歷若採用非遞迴的方法,就要採

演算法貪心演算法

1. 定義 貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。 2. 基本要素 (1)貪心選擇 貪心選擇是指所求問題的整體最優解可以通過一系列區域性最優的選擇,即貪心選擇